gpt4 book ai didi

java - 所有业务逻辑都在存储过程中

转载 作者:行者123 更新时间:2023-12-01 06:13:34 25 4
gpt4 key购买 nike

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

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

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

我试图说服我的客户,并给出一些缺点和优点,如果将业务逻辑转移到数据库,如下所示:

缺点:

  • 存储过程不是编程语言,它应该用于管理数据而不是用于编写逻辑代码
  • 存储过程使逻辑变得复杂。一种逻辑可能很难用存储过程实现,但如果使用Java这样的编程语言就很容易实现
  • 难以调试或单元测试
  • 异常难以处理
  • 维护、更新困难
  • 存储过程无法与外部系统集成
  • 当 ORM 框架非常适合 CRUD 时,要花很多精力为每个表编写 CRUD
  • 难以制定清晰的设计文档
  • 更多错误
  • 放慢开发进程
  • 数据库服务器将变得过载
  • 数据库应该用于处理数据而不是处理逻辑
  • 升级或添加新的数据库服务器困难且昂贵,但使用应用程序服务器则更容易且更便宜
  • 打破 N 层架构和 ORM 框架

使用存储过程时:

  • 性能:使用数据库处理批量数据或长时间处理(如报告...)

我的客户还说:他们希望使用商店来修复项目而不需要重新部署。我解释说,当更改业务逻辑时,也许我们需要更改输入、输出和用户界面,那么我们仍然需要重新部署,并且我们应该将业务逻辑从数据库中取出。但他们拒绝了。

最佳答案

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

举个例子,您想在前端显示一个逻辑报告,并且您确定它只有几 Kb,并且您知道要生成此报告,您可以调用 DB 并以 MB 的形式获取记录并在 JAVA 中执行业务逻辑,可以吗?快一点??

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

由于存储过程在数据库层中工作,因此与 JAVA 相比它总是很快。根据我的观点,您在 JAVA 业务层中进行的复杂的与数据库相关的查询只需移动到存储过程并使用 java 检索所需的输出并显示前端也一样。

此外,我想展示存储过程的最佳优点。

  • 速度更快,因为可以在到数据库的一次“往返”中执行多个 SQL 查询等

  • 从多个应用程序使用存储过程很简单

  • 一个地方比多个地方更容易维护

  • 数据库速度快、经过优化,并且可以很好地扩展。

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

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

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

关于java - 所有业务逻辑都在存储过程中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29802786/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com