简而言之——在CLR 存储过程中实现大部分业务逻辑是否是一个好的设计解决方案?
我最近读了很多关于它们的文章,但我不知道什么时候应该使用它们,什么是最佳实践,它们是否足够好。
例如,我的业务应用程序需要
- 解析一个固定长度的大文本文件,
- 从文件的每一行中提取一些数字,
- 根据这些数字应用一些复杂的业务规则(涉及正则表达式匹配、与数据库中许多表中的数据进行模式匹配等),
- 并且作为这个计算更新数据库中的记录的结果。
还有一个 GUI 供用户选择文件、查看结果等。
此应用程序似乎是实现经典 3 层架构的理想选择:数据层、逻辑层和 GUI 层。
- 数据层将访问数据库
- 逻辑层将作为 WCF 服务运行并实现业务规则,与数据层交互
- GUI 层将是逻辑层和用户之间的一种通信方式。
现在,考虑到这种设计,我可以看到大部分业务规则可以在 SQL CLR 中实现并存储在 SQL Server 中。我可能会将所有原始数据存储在数据库中,在那里运行处理并获得结果。我看到了这个解决方案的一些优点和缺点:
优点:
- 业务逻辑靠近数据运行,这意味着更少的网络流量。
- 一次处理所有数据,可能利用并行化和最佳执行计划。
缺点:
- 业务逻辑的分散:有些部分在这里,有些部分在那里。
- 有问题的设计方案,可能会遇到未知问题。
- 难以为处理任务实现进度指示器。
我想听听您对 SQL CLR 的所有意见。有人在生产中使用它吗?这样的设计有问题吗?这是一件好事吗?