使用存储过程作为业务逻辑层

Gai*_*sei 8 sql-server stored-procedures

我正在为之工作的公司目前正在使用存储过程(在MsSQL服务器后端)作为其业务逻辑层.实际的业务逻辑DLL只调用sProcs并基本上管理UI(事件,数据绑定等)

我觉得设置有问题,虽然我不确定如何向同事解释.顺便说一句,系统工作.

我工作场所的"最佳实践"是错误的吗?或者我只是过度思考这个?

GSe*_*erg 6

我们这样做.

这是因为我们支持用户使用除预期软件之外的程序(如SQL Management studio,osql和Excel)连接到数据库的场景.

当你直接连接到一个不超过数据存储的数据库时,你可以搞清楚一切,因为没有任何规则可以阻止你.这些规则只存在于使用该数据库的程序中,如果您不使用该程序,您可以使用I-can-write-to-table-table权限来执行愚蠢(或有趣)的事情.

如果您只有执行存储过程的权限,则不能.
我个人认为这是一种更好的方法.


jim*_*lan 6

GaiusSensei - 只要业务领域能够处理业务实践中的地震变化,就可以以这种方式工作.我认为SP和BLL dll之间的争论仍然存在,毫无疑问,双方在这个问题上会有很多.但是,根据我自己在过去10年中对一系列项目的经验,以下是我对BLL dll方法的支持:

  • BLL中包含的逻辑可以与存储介质"不可知",因此更改更灵活(这种情况发生的频率是有争议的)
  • 对业务权限的更细粒度控制ACROSS依赖于数据存储的一系列应用程序.我的意思是核心表,其完整性必须保持在特定于其所涉及的业务应用程序中的使用的级别.
  • BLL逻辑可以封装在自包含的类中,可以在业务和/或项目的其他区域中重用.该课程甚至可以写成密封课程或可扩展,具体取决于您的目标"观众"
  • 单元测试 - 根据我的经验,这是一种黑色艺术,如果在SP内部使用.在java/c#等下,这是一个标准,有些人会说强制练习.
  • 可维护性.通过在BLL dll场景中保持组织良好的接口,您可以轻松地支持开发人员扩展您的类而不会破坏现有逻辑
  • 可移植性.您的BLL(取决于语言实现)可以托管在各种平台上.同样,数据存储区的实现注入可以是从xml文件到mysql,mssql postgres等等.
  • 标准化.数据架构师可以准确定义应如何从数据库中获取每个数据元素以及如何保存每个项目(这样可以更好地位于DAL dll中).因此,项目的新开发商和经验丰富的入门成本大大降低.

列表继续,但是,这些是我采用BLL方法的头顶PROS.

在这一个看起来很多旋转:)

吉姆

[编辑] - 我还要补充一点,这个BLL不应该发出任何UI信息,除了(如你所说)传达事件等,每个UI层(与目标设备相关 - 浏览器/移动设备/工厂)应该参考BLL并用数据自己做'thang'.我进一步补充说,BLL下面是你的DAL层.可以将此层视为基础数据存储区的1-1引用.


Chu*_*way 6

听起来您的业务层实际上是数据层,而您的应用程序没有业务层,但我离题了......

最佳实践被高估并随时间而变化.如果他们正在做的事情并且他们对此感到满意,那么就没有太多可以做的事了.

我不能告诉你我有多少项目在新人加入的地方并且认为当前的架构需要改变.我自己做了几次.这不是一个好地方.现状将打击你到最后.如果您真的打算改变当前系统,那么建立一些可信度.在3到6个月内开始建议更好的方法来接近一些现有的基础设施.如果你真的不喜欢当前的架构,那就离开公司吧.

该应用程序是用最好的意图编写的.最初的开发人员受到时间,经验和技术的限制.

像你描述的应用程序是成熟的学习机会.注意失败点,从中学习成功.你会惊讶于你学到的东西.