具有数据传输对象(DTO)的服务层



我正在开发一个基于以下模块的多模块maven应用程序:

  1. 模型,包含所有域实体
  2. Persistence,包含用于访问模型的所有Repository(或DAO(
  3. 服务,包含所有业务逻辑
  4. Web,包含所有控制器逻辑以公开其余API

我试图弄清楚的问题是关于DTO映射,现在依赖关系是以线性方式组织的:

Model <- Persistence <- Service <- Web

所有DTO逻辑应该属于哪里?假设我们在服务层中有一种称为的方法

createRoom(CreateRoomDTO createRoomDTO)

在这种情况下,CreateRoomDTO类与服务和web模块高度耦合,但并非所有DTO类都由服务层(例如寻呼过滤器(使用

这是基于边界意见的,但在我看来,DTO类应该在服务层和Web层之间使用,显然是通过外部API公开数据。原因是,如果只将它们保留在Web层中,则意味着需要将逻辑从服务层推送到Web层,以便从例如CreateRoomDTO对象创建域模型。您绝对应该避免它,因为这是应该保留在服务层中的逻辑。

最新更新