Sql server 使用存储过程作为业务逻辑层
我所在的公司目前正在使用存储过程(在MsSQL服务器后端)作为其业务逻辑层。实际的业务逻辑DLL只调用存储过程,基本上管理UI(事件、数据绑定等) 虽然我不知道如何向我的同事解释,但我认为设置有问题。顺便说一句,系统工作正常 我工作场所的“最佳实践”是错误的吗?还是我想得太多了?我们就是这么做的Sql server 使用存储过程作为业务逻辑层,sql-server,stored-procedures,Sql Server,Stored Procedures,我所在的公司目前正在使用存储过程(在MsSQL服务器后端)作为其业务逻辑层。实际的业务逻辑DLL只调用存储过程,基本上管理UI(事件、数据绑定等) 虽然我不知道如何向我的同事解释,但我认为设置有问题。顺便说一句,系统工作正常 我工作场所的“最佳实践”是错误的吗?还是我想得太多了?我们就是这么做的 这是因为我们支持用户使用预期软件以外的程序(如SQL Management studio、osql和Excel)连接到数据库的场景 当您直接连接到一个只不过是数据存储的数据库时,您可能会把一切都搞糟,因
这是因为我们支持用户使用预期软件以外的程序(如SQL Management studio、osql和Excel)连接到数据库的场景 当您直接连接到一个只不过是数据存储的数据库时,您可能会把一切都搞糟,因为没有任何规则会阻止您。这些规则只存在于使用此数据库的程序中,如果不使用该程序,则可以使用I-can-write-to-this-table权限执行愚蠢(或有趣)的操作 如果您只有执行存储过程的权限,则无法执行。
我个人认为这是一种更好的方法。GaiusSensei-只要业务领域能够处理业务实践中的巨大变化,就可以这样工作。我认为SP和BLL dll之间的争论仍然很激烈,毫无疑问,在这个线程中双方都会有很多。然而,根据我过去10年在一系列项目中的经验,以下是我支持BLL dll方法的观察结果:
- BLL中包含的逻辑可以是 存储介质的“不可知论”和 因此更灵活的改变 )但这种情况发生的频率是 (有争议)
- 对业务的细粒度控制 跨一系列 依赖于 数据存储。我指的是核心 表的完整性必须是 保持在特定于 它在企业内部使用 有问题的申请
- BLL逻辑可以封装在self中 包含可重复使用的类 在其他业务领域和/或 项目这个班甚至可以 以密封的类或类的形式书写 可扩展性取决于您的目标 “观众”
- 单元测试-这(在我的 经验)如果使用,则为黑色艺术 在SP的内部。在java/c#etc下 有人会说,这是一个标准 现在强制实行
- 可维护性。保持健康 BLL dll中的有组织接口 在这种情况下,您可以使 支持开发人员扩展您的 在不破坏现有 逻辑
- 便携性。您的BLL(取决于 语言实现)可以是 托管在各种平台上。 同样,注射 数据存储的实现可以 从字面上看,它可以是xml中的任何内容 文件到mysql、mssql postgres等, 等等
- 标准化。数据架构师 可以准确地定义每个数据 元素应取自 数据库以及每个项目应如何 已保存(但最好位于DAL dll中)。因此,企业的进入成本 新的开发商以及经验丰富的,对该项目的影响很大 减少
[编辑]-我还要补充的是,此BLL也不应发出任何UI信息,除了(如您所述)传达事件等。每个UI层(与目标设备相关-浏览器/移动设备/工厂)应参考BLL,并使用数据进行自己的“转换”。我还要补充一点,BLL下面是DAL层。这个层可以被认为是对底层数据存储的1-1引用。我要说的是,存储过程不适合进行单元测试和重构,就像.net/java中的业务层逻辑一样。我会尽可能地将逻辑排除在数据库之外,主要的例外是基于集合的操作,在这些操作中,DBMS会表现出色 (我添加了“主观”标签) 我更喜欢使用存储过程,除非是在我快速开发的小应用程序中,因为处理存储过程需要一些额外的时间 Christophers 5000:您仍然可以使用存储过程进行单元测试 我倾向于同意这两个类似问题的答案:
您描述的应用程序是成熟的学习机会。注意失败点,从成功中学习。您将对所学到的东西感到惊讶。我认为存储过程作为业务逻辑的一部分是很好的。我认为您不需要将整个业务逻辑放在一个dll中。但是,如果您有一个管理UI的业务层,我认为您需要使用某种框架将UI管理与业务层分离。分离应该是功能性的,不要在存储过程或业务逻辑中嵌入数据,反之亦然。我还认为,如果你有其他程序,如excel或reporting,访问数据