我正在开发一个基于以下模块的多模块maven应用程序:
- 模型,包含所有域实体
- Persistence,包含用于访问模型的所有Repository(或DAO(
- 服务,包含所有业务逻辑
- Web,包含所有控制器逻辑以公开其余API
我试图弄清楚的问题是关于DTO映射,现在依赖关系是以线性方式组织的:
Model <- Persistence <- Service <- Web
所有DTO逻辑应该属于哪里?假设我们在服务层中有一种称为的方法
createRoom(CreateRoomDTO createRoomDTO)
在这种情况下,CreateRoomDTO类与服务和web模块高度耦合,但并非所有DTO类都由服务层(例如寻呼过滤器(使用
这是基于边界意见的,但在我看来,DTO类应该在服务层和Web层之间使用,显然是通过外部API公开数据。原因是,如果只将它们保留在Web层中,则意味着需要将逻辑从服务层推送到Web层,以便从例如CreateRoomDTO
对象创建域模型。您绝对应该避免它,因为这是应该保留在服务层中的逻辑。