Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Spring应用程序中构造层和职责?_Java_Spring_Postgresql_Architecture - Fatal编程技术网

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

Java 如何在Spring应用程序中构造层和职责?,java,spring,postgresql,architecture,Java,Spring,Postgresql,Architecture,我阅读了一些关于在Spring中创建应用程序的文章和教程,以了解如何将独立(而非web)Spring应用程序分层 情况-我的应用程序将处理一些数据并使用它进行一些计算。数据将从不同的数据源(PostgreSQL和RESTful API)存储和读取 我知道如何构建我的应用程序: 域对象(com.example.Domain)-简单的POJO类,如产品、订单、客户等 服务层(com.example.Service)-这些类将处理业务逻辑,与控制器和DAO对象协作,并将实现一些接口(ProductM

我阅读了一些关于在Spring中创建应用程序的文章和教程,以了解如何将独立(而非web)Spring应用程序分层

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

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

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

  • 这个划分正确吗,对你有意义吗

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

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


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

    这种分离很有意义

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


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

    对于独立的应用程序,我强烈建议您考虑引导应用程序和数据处理。避免像瘟疫一样使用所有XML。您的结构看起来很好。那么您的意思是服务层应该只有一个,并且DAO实现负责向服务提供所有和完全限定的数据吗?在我的情况下,创建接口定义服务的另一个实现的合适用例是什么?我不能说,因为这取决于应用程序的实际功能。对于生产代码,您可能只有每个服务的一个实现,并且没有任何错误。但是您可能需要创建一些服务的简单实现(想想存根或虚拟),以便能够基于它测试其他服务。