为什么我们在JPA存储库中使用Service层和DAO?

4

为什么我们需要在JPA存储库中使用Service层和DAO?

在Spring MVC项目中,是否有使用此架构的标准?

我对此感到困惑,因为我是Spring MVC的新手。请帮助我。

提前致谢。


我们通常使用服务层来抽象出DAO层。业务层不应该知道我们正在使用哪个ORM。它只应该与服务层交互。如果您需要切换DAO层,这也会有所帮助。 - Amit
当我们谈论使用JPA Repository(我相信您在谈论Spring Data JPA)时,通常涉及到领域驱动设计,在DDD中,人们通常认为Repository属于Domain层,而在这种设计中没有所谓的DAO层。 Repository通常被认为是更抽象的概念,而DAO则用于更技术性的目的(啊...在这样一个简短的段落中很难解释清楚)。 - Adrian Shum
2个回答

1
我正在使用Spring MVC,在我的项目中有三层:
  1. 控制器(Controller)
  2. 服务(Service)
  3. 数据访问对象(DAO)
控制器(Controller)仅控制项目的输入和输出。在控制器中,我们不编写任何业务逻辑。
我们将所有业务逻辑编写在服务(Service)层中。
在数据访问对象(DAO)中,我们编写数据库逻辑,如CRUD操作。
这样做是因为我们不希望将所有逻辑流混合在一个类中。这会增加负担并且难以调试。

1

使用服务层的两个原因:

1. 代码模块化:

使用服务层,我们可以将代码分成不同的层,例如ORM和业务逻辑。

2. 安全性

服务层与数据库无关,因此除了通过服务之外,客户端很难访问数据库。如果不能直接从客户端访问数据库(并且没有简单的DAO模块作为服务),那么接管客户端的攻击者所能做的就是尝试在获取所有但最清洁的数据访问权限之前,同时入侵服务层。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接