【发布时间】:2014-06-12 01:27:17
【问题描述】:
在阅读了关于 stackoverflow 的一些 Q/As 之后,我仍然对在我的 Web 应用程序中正确实现 DTO 感到困惑。我当前的实现是一个(基于 Java EE)的多层架构(具有持久性、服务和表示层),但所有层都使用一个“通用”包,其中包含(以及其他)域对象。在这种情况下,这些层实际上不能被认为是独立的。 我打算逐步删除通用包,但我遇到了各种挑战/问题:
- 假设持久层将使用一个类myproject.persistence.domain.UserEntity(一个基于JPA 的实体)来存储数据到/从数据库加载数据。为了在视图中显示数据,我将提供另一个类 myproject.service.domain.User。我在哪里转换它们?用户的服务是否负责在两个类之间进行转换?这真的有助于改善耦合吗?
- User 类应该是什么样子的?它应该只包含不可变的吸气剂吗?视图编辑现有用户会不会很麻烦(创建一个新的User,使用现有User对象的getter等)?
- 我应该使用相同的 DTO 类 (User) 向服务发送请求以修改现有用户/创建新用户,还是应该实现其他类?
- 通过使用 myproject.service.domain 中的所有 DTO,表示层会不会非常依赖服务层?
- 如何处理我自己的异常?我当前的方法会重新抛出大多数“严重”异常,直到它们被表示层处理(通常它们被记录并且用户被告知出现问题)。一方面,我有一个问题,我再次拥有一个共享包。另一方面,我仍然不确定这是否可以被视为“最佳实践”。有什么想法吗?
感谢您的任何回答。
【问题讨论】:
-
我投票结束这个问题,因为它是一个架构而不是一个编程问题。
标签: java jpa dto multi-tier