gpt4 book ai didi

java - Spring——解耦与性能

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:48:57 25 4
gpt4 key购买 nike

我有一个包含以下 java 文件的应用程序:

服务:

AccountService.java
UserService.java
MessageService.java

DAO:

AccountDAO.java
UserDAO.java
MessageDAO.java

表格:

ACCOUNTS
USERS
MESSAGES

MessageService.java 中,我有一个函数 newMessage() 必须从所有 3 个表中查询数据。

(1)按照Spring的解耦标准,应该这样调用:

                     AccountDAO.java -- ACCOUNTS
/
MessageService.java -- MessageDAO.java -- MESSAGES
\
UserDAO.java -- USERS

但问题是,这种方法进行了 3 次数据库调用。

(2) 为了获得更好的性能,我会这样做:

MessageService.java -- MessageDAO.java -- Join ACCOUNTS, MESSAGES and USERS

但通过这种方式,它是紧密耦合的,如果 USERS 表发生变化,我也必须更改 MessageDAO.java(以及我拥有的所有其他使用 USERS 表的 DAO)。这真的很糟糕,因为(在非假设中)我​​们有很多 DAO

哪种方法被认为是更好的做法?还是我缺少另一种方法?

最佳答案

According to Spring's decoupling standards, this is how the calls should be made

这是错误的。 Spring 没有“解耦标准”。请在 Spring 文档中找到我的引用资料,告诉您必须如何构建持久层代码。

通常,您的应用程序要操作的每个“实体”都有一个 DAO,但将这种模式极端化以解构将多个表连接成三个不同查询的查询是愚蠢的。

如果您需要一个 newMessage() 方法在查询中将一些表连接在一起,请选择最有意义的 DAO - 可能是 MessageDAO 和以有意义的方式编写查询/方法。

但是没有规定必须对每个实体进行不同的查询,并且不允许一个 DAO 类进行涉及其他实体表的查询。这太极端了,没有任何好处。

另一方面,如果您担心具有多个数据层类的可维护性,这些类可以识别您的所有表,那么请研究 parsifal 提到的 ORM 解决方案以减轻一些这项工作。

关于java - Spring——解耦与性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12827003/

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