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

时间:2014-07-15 09:09:48

标签: java spring postgresql architecture

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

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

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

  • 域对象com.example.domain) - 简单的POJO类,如产品,订单,客户等。
  • 服务层com.example.service) - 这些类将处理业务逻辑,并将与控制器和DAO对象合作,并将实现一些接口(ProductManager,OrderManager,... )。
  • DAO /存储库层com.example.repository) - 定义原始数据操作的接口(ProductDao,OrderDao)。将为特定数据源(PostgreSQLProductDao等)实现这些接口。

问题:

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

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

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

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

1 个答案:

答案 0 :(得分:0)

这种分离很有意义。

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

因此,DAO实现应该注意从底层数据源获取实体。