Stored procedures 我需要知道在程序中保留业务层的缺点

Stored procedures 我需要知道在程序中保留业务层的缺点,stored-procedures,business-logic,Stored Procedures,Business Logic,在我的工作中,我有一个朋友坚持使用存储过程将业务逻辑保存在数据库中 我可以用什么论据来说服他不要做这种事 他之所以想这样做,是因为我们有多个系统具有不同的平台形式(VB.NET中的Web应用程序和Power Builder-Sybase中开发的另一个桌面应用程序) 谢谢 我可以用什么论据来说服他不要做这种事 你反对它的理由是什么?为什么您一定要远离存储过程 这其实是个不错的主意。如果您有使用不同语言编写的不同系统访问数据库,那么在数据库中至少保留一些业务逻辑可能会有所帮助。我选择web服务有以下

在我的工作中,我有一个朋友坚持使用存储过程将业务逻辑保存在数据库中

我可以用什么论据来说服他不要做这种事

他之所以想这样做,是因为我们有多个系统具有不同的平台形式(VB.NET中的Web应用程序和Power Builder-Sybase中开发的另一个桌面应用程序)

谢谢

我可以用什么论据来说服他不要做这种事

你反对它的理由是什么?为什么您一定要远离存储过程


这其实是个不错的主意。如果您有使用不同语言编写的不同系统访问数据库,那么在数据库中至少保留一些业务逻辑可能会有所帮助。

我选择web服务有以下几个原因:

  • 您可以向所有类型的客户端公开您的服务以使用它
  • 它更灵活,调试更方便,用于测试
  • 您将获得更好的源代码管理支持
  • 您的编程语言可能比SQL更具表现力
      • 不是强类型的
      • 无法轻松重构,在运行时中断客户端
      • 不可单元测试
      • 很可能不是所有的业务逻辑都可以是一个存储过程,所以您的逻辑在数据库和代码中被分割
      • 存储过程没有编程语言那么强大
      • 很难获得正确级别的封装,这要求客户机了解数据模式的内部结构
      • 难以理解
      • 业务逻辑与一家数据库供应商紧密相连,您将终生与之为伍
      • 更难和更昂贵的规模

      无论如何,您只需使用DB来做它最擅长的事情。聚合和数据完整性之类的东西


      但每一种制度都是一种妥协。如果您有5组不同的客户机,那么DB可能是最好的地方。并不是每个电子表格或Access DB都可以称您美丽的中间层web服务…

      Pro web服务,con数据库逻辑:

    • 如果您的数据库被其他人共享,那么如果您将逻辑放入数据库,您的应用程序现在将在数据层和逻辑层耦合。这通常是件坏事
    • 我会关心数据库服务器上的负载。如果您的关系数据库受到查询和计算的影响,您将无法像中间层进行计算那样轻松地扩展它
    • Pro数据库逻辑,con web服务:

    • 如果数据库完全由您的应用程序所有,那么将逻辑放入其中可能是一个可接受的选择
    • 我不太担心切换数据库,因为这种情况比中间层的更改更少见。中间件风潮此起彼伏,但数据是任何业务的王冠宝石
    • Web服务也有其缺点。将XML转换为对象并返回是对CPU周期的浪费。内存调用比网络调用快几个数量级。今天,到“简单”服务的一次往返可能是200毫秒,但开始将这些时间相加,很快您的SLA就会消失
      不要向教条屈服。考虑两者的利弊,并根据你的应用程序的特定情况做出合理的决定。你和你的同事听起来都像是你做出了非黑即白的情感决定。记住:结果并不反映你作为一个人。在它投入生产后,你会发现它是如何描述你作为一名设计师的

      我忘了说。。。我想使用web服务=DYou说您想使用web服务,但想必您一定有理由这样做而不是使用存储过程?为什么不先告诉我们你的理由是什么?或者我和他之间使用POST和返回XML进行简单的协议谈判。。。示例:return:xxxxxxxxxx 99/99/9999很好,但由于这不是一个答案,更适合作为评论。+1-我决定保留与评论相同的意见,但它作为一个答案同样有效。据推测,OP想要走上一条特定的道路一定有他自己的原因。通常,如果你想让不同语言的不同系统访问数据库,你可以提供泛素和可互操作的解决方案,即XML/HTTP接口,这样,所有客户机只需要一个HttpClient,而不是数据库供应商库和模式知识。然后,您可以在不影响任何客户机的情况下自由更改web服务的内部结构。但是,如果DB允许使用Java之类的公共编程语言进行存储过程,那么其中一些不是很有意义吗?然后你可以在DB之外开发和单元测试。如果你在.NET中编写你的业务逻辑,你将终生停留在.NET中。。。那么,这里的重点是什么呢?.NET是一个免费的开放规范,在任何地方(服务器、台式机、嵌入式设备、linux/mono)都可以运行,并且为全球数百万开发人员所熟知和支持。它可以组件化并以多种语言重复使用,等等。为什么要在嵌入式设备上运行服务器?您可以在桌面计算机上运行数据库服务器。但你为什么要这么做?对于一个严肃的产品来说,获得严肃的mono不是一个选择。对不起,我认为这一点在这里不适用。一般来说这是正确的,但与这个问题无关。@anthares:我同意你的看法@mythz:对不起,但你听起来像个架构宇航员……Web服务更具可扩展性,可以处理更多并发连接。大多数情况下,数据库是瓶颈。您不局限于XML,还有其他高性能选项可用,例如协议缓冲区等。同意-这就是我在第三段中所说的:“……将无法轻松扩展它…”这可能是可行的
      Edit: other user-contributed points: