Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 使用存储过程作为业务逻辑层_Sql Server_Stored Procedures - Fatal编程技术网

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

Sql server 使用存储过程作为业务逻辑层,sql-server,stored-procedures,Sql Server,Stored Procedures,我所在的公司目前正在使用存储过程(在MsSQL服务器后端)作为其业务逻辑层。实际的业务逻辑DLL只调用存储过程,基本上管理UI(事件、数据绑定等) 虽然我不知道如何向我的同事解释,但我认为设置有问题。顺便说一句,系统工作正常 我工作场所的“最佳实践”是错误的吗?还是我想得太多了?我们就是这么做的 这是因为我们支持用户使用预期软件以外的程序(如SQL Management studio、osql和Excel)连接到数据库的场景 当您直接连接到一个只不过是数据存储的数据库时,您可能会把一切都搞糟,因

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

虽然我不知道如何向我的同事解释,但我认为设置有问题。顺便说一句,系统工作正常

我工作场所的“最佳实践”是错误的吗?还是我想得太多了?

我们就是这么做的


这是因为我们支持用户使用预期软件以外的程序(如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方法的理由

看着这张照片上的许多旋转:)

吉姆


[编辑]-我还要补充的是,此BLL也不应发出任何UI信息,除了(如您所述)传达事件等。每个UI层(与目标设备相关-浏览器/移动设备/工厂)应参考BLL,并使用数据进行自己的“转换”。我还要补充一点,BLL下面是DAL层。这个层可以被认为是对底层数据存储的1-1引用。

我要说的是,存储过程不适合进行单元测试和重构,就像.net/java中的业务层逻辑一样。我会尽可能地将逻辑排除在数据库之外,主要的例外是基于集合的操作,在这些操作中,DBMS会表现出色

(我添加了“主观”标签)

我更喜欢使用存储过程,除非是在我快速开发的小应用程序中,因为处理存储过程需要一些额外的时间

Christophers 5000:您仍然可以使用存储过程进行单元测试

我倾向于同意这两个类似问题的答案:


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

最佳实践被高估,并随着时间的推移而变化。如果他们所做的工作奏效,并且他们对此感到满意,那么就没有什么可以做的了

我不能告诉你我参加过多少个项目,其中有一个新成员加入,并且认为当前的架构需要改变。我自己也做过几次。这不是个好地方。现状将与你斗争到底。如果你真的想改变当前的系统,那就建立一些可信度。在3到6个月内,开始建议更好的方法来接近一些现有的基础设施。如果你真的不喜欢当前的架构,那就离开公司

这份申请书是出于好意写的。最初的开发人员受到时间、经验和技术的限制


您描述的应用程序是成熟的学习机会。注意失败点,从成功中学习。您将对所学到的东西感到惊讶。

我认为存储过程作为业务逻辑的一部分是很好的。我认为您不需要将整个业务逻辑放在一个dll中。但是,如果您有一个管理UI的业务层,我认为您需要使用某种框架将UI管理与业务层分离。分离应该是功能性的,不要在存储过程或业务逻辑中嵌入数据,反之亦然。我还认为,如果你有其他程序,如excel或reporting,访问数据