java - 如何在 Spring 应用程序中构建层和职责?

标签 java spring postgresql architecture

我浏览了一些关于在 Spring 中创建应用程序的文章和教程,以获取有关如何将我的独立(而非 Web)Spring 应用程序构建成层的信息。

情况 - 我的应用程序将处理一些数据并对其进行一些计算。数据将从不同的数据源(PostgreSQL 和 RESTful API)存储和读取。

我知道如何构建我的应用程序:

  • 域对象 (com.example.domain) - 简单的 POJO 类,如 Product、Order、Customer 等。
  • 服务层 (com.example.service) - 这些类将处理业务逻辑并将与 Controller 和 DAO 对象协作并将实现某些接口(interface) (产品经理、订单经理……)。
  • DAO/存储库层 (com.example.repository) - 定义原始数据操作的接口(interface)(ProductDao、OrderDao)。将为特定数据源(PostgreSQLProductDao 等)实现这些接口(interface)。

问题:

  1. 这种划分是否正确,对您来说有意义吗?

  2. 当我使用另一个 DAO 实现时,是否应该在不影响服务类的情况下完成此切换?我问是因为由于另一种数据结构,数据处理将以不同的方式处理。例如,当我使用另一个项目实例中的同一个数据库 (PostgreSQL),并且数据以不同的形式存储时,我需要进行不同的计算(从 DAO 层调用另一个方法,对数据进行一些其他操作)。应该在service层做还是在DAO层做?我是否应该为我们的每个项目和数据源实现更多服务层?

例如:在我们的一个 PostgreSQL 数据库中有客户,其中一些客户的行中没有所有信息。因此,对于这个数据库,我需要在从数据源读取客户后获取这些缺失的信息。因为,从我的角度来看,DAO 应该只做基本操作(比如 CRUDL),所以我不确定这应该在 DAO 层还是服务层完成。

我读了很多文章,但我没有找到这些问题的明确答案。谢谢。

最佳答案

这种分离很有意义。

在专用层中分离数据访问代码的目标之一是解决您提出的问题。服务层不应该关心客户存储的位置和方式以及如何正确获取所有需要的字段。这是 DAO 的责任。

因此 DAO 实现应该负责从底层数据源获取实体。

关于java - 如何在 Spring 应用程序中构建层和职责?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24754148/

相关文章:

postgresql - 如何在 Kubernetes 中使用 Aws EBS 挂载 postgresql 卷

python - bcrypt 和 postgresql。应该使用什么数据类型?

java - RMI 内存不足异常

java - 如何通过 1 个按钮设置 2 个或更多图像

java - 解释使用 Hibernate 映射自动递增复合 id 序列中的行为

java - 窗口关闭和 JFrame 的单个实例

mysql - 如何阻止 HSQL 被使用?

java - 使用显示错误的 hibernate 更新 mysql 表

java - 我的 Java SQL Update 语句没有更新我的数据库,我不知道这是语句问题还是连接问题

java - Spring - 在 JPA 事务之后提交 JMS 事务