存储过程中的所有业务逻辑

时间:2015-04-22 15:51:58

标签: java spring stored-procedures logic

我的项目使用N-Tier架构和通用框架:

  • 表示层:JSF 2.0 + Primefaces
  • 业务逻辑层:管理交易的春天
  • 数据访问层:Spring Data + JPA
  • 用于安全性和用户管理的Spring安全性
  • 与外部系统集成的Spring集成

对于几乎所有业务逻辑,我们使用Java代码并驻留在业务层中,但我的客户端要求我们将所有业务逻辑移动到数据库中并使用存储过程(数据库是Oracle)。

如果将业务逻辑移动到数据库,我试图说服我的客户并给出一些不利和优势:

缺点

  • 存储过程不是编程语言,它应该用于管理数据而不是用于写入逻辑代码
  • 存储过程使逻辑变得复杂。一个逻辑可能很难用存储过程实现,但如果使用Java编程语言则非常容易
  • 难以调试或单元测试
  • 对处理程序异常的影响
  • 难以维护,更新
  • 存储过程无法与外部系统集成
  • 当ORM Framework真正适合CRUD
  • 时,要为每个表编写CRUD
  • 难以明确设计文件
  • 更多错误
  • 放慢开发过程
  • 数据库服务器将过载
  • 数据库应该用于处理非流程逻辑的数据
  • 升级或添加新数据库服务器既困难又昂贵,但应用程序服务器更容易,更便宜
  • 打破N层体系结构和ORM框架

使用存储过程时:

  • 效果:使用数据库处理批量数据或长时间处理(作为报告...)

我的客户还说:他们希望使用商店来修复项目而无需重新部署。我解释说,当改变业务逻辑可能需要改变输入,输出和用户界面时,我们仍然需要重新部署,我们应该将业务逻辑从数据库中删除。但他们拒绝了。

1 个答案:

答案 0 :(得分:-1)

如果您使用ORACLE DB,那么永远不要低估存储过程的功能。我在许多非常繁重的应用程序中工作,是的,它有JAVA层但是在JAVA层中根本无法处理具有业务逻辑的大量数据。所以我们在存储过程中移动了大部分数据处理逻辑,它就像任何东西一样。

例如,您希望在前端显示逻辑报告,并且您确定它只有几个Kbs,并且您知道要生成此报告,您调用数据库并以MB为单位获取记录并在JAVA中执行业务逻辑,是否会要快?

我是java人,但仍然支持存储过程,因为你可以做很多事情,即使你可以在其中编写有用的业务逻辑。

同样存储过程在DB层工作,所以它总是快速比较JAVA.as我认为你在JAVA业务层中的复杂数据库相关查询只是移动到存储过程并使用java和显示检索所​​需的输出在前端也一样。

另外我想把存储过程的最佳优点。

  • 它更快,因为可以在一次"往返行程中执行多个SQL查询等等。到数据库

  • 使用多个应用程序中的存储过程是微不足道的

  • 一个地方比多个

  • 更容易维护
  • 数据库快速且经过优化,可以很好地扩展。

  • 可以从多个不同的框架和语言调用相同的过程。

  • 逻辑与特定应用程序中的实现分离。

  • 当数据库保持不变时,可能会因更改应用程序而减少返工。