【发布时间】:2019-10-10 20:18:41
【问题描述】:
我正在按照分层架构实现一个模块。它将具有表示层、服务层、业务层和 DAO 层。 根据分层架构指南,通信流应该是自上而下的。同样,依赖关系也应该是自上而下的,即表示层 - 使用 -> 服务层 - 使用 -> 业务层 - 使用 -> DAO 层。即业务层不应该依赖于服务层等等。
问题一:
每一层的输入应该是什么?既然服务层是从表示层调用的,那么服务层应该接受 UI bean 作为输入吗?或 Service Bean 作为输入? 业务层和 DAO 层也是如此。
问题2:
DAO 层应该是每个表还是可以处理多个表(全部由单个模块拥有)?我模块的数据存储在多个表中。由于所有这些表都归一个模块所有,我认为有一个单一的 DAO 层是有意义的,它从上层抽象了数据的多表存储。此外,如果需要插入 DAO 层的不同实现(数据库存储、SVN 存储等),则插入单个实现(处理所有数据)是有意义的。此外,多表 DAO 在获取数据方面会提高性能(单个连接查询就足够了)
问题 3:
如果考虑多表 DAO 设计,那么 DAO 层的输入将是业务 bean。 DAO 层负责将业务 bean 转换为多个 DB bean,每个 DB bean 代表一个表并处理持久性。 但这不符合分层架构,它说层应该是隔离的,任何层都不应该依赖于它的上层。在这种情况下,DAO 层的输入是业务 bean(不是 DB bean),从业务 bean 到 DB bean 的转换,反之亦然是 DAO 层的责任,这意味着它知道如何将业务 bean 转换为 DB bean反之亦然。
有人可以澄清一下吗?实现这样一个模块的正确方法应该是什么?当前的实施是否符合指导方针? 一个适当的解释会有很大帮助。谢谢!
我目前的实现是
表示层: 将 UI bean 转换为服务 bean 并将其传递给服务层。
服务层: 将服务 bean 转换为业务 bean 并将其传递给业务层。还协调各种依赖服务之间的调用。处理事务边界。将服务 bean 返回到表示层。
业务层: 将业务 bean 传递给 DAO 层。将服务 bean 返回到服务层
DAO 层: 将业务 bean 转换为 DB bean,反之亦然。将业务 bean 返回到业务层。
【问题讨论】:
标签: architecture dao dependency-management design-principles layered