在通过 Hibernate 支持的事务服务方法传递数据时,是否有任何真正实用的方法可以避免使用 DTO?换句话说,DTO 是避免延迟初始化问题的唯一非 hacky 解决方案吗?
我认为 DTO 的两种流行替代方案以及我不太喜欢它们的原因是:
在视图模式中打开会话。这是我不喜欢的,因为我想让服务方法真正具有事务性(即,当方法退出时,Hibernate 会话被提交并关闭)。这主要是因为如果我以后需要将服务发布为 Web 服务,我不想担心事务。
通过服务方法而不是 DTO 传递域/业务对象,并急切地获取所需的属性/属性。这要好一些。然而,在具有复杂实体关系的非平凡领域对象层次结构中,急切的获取必须在某处停止。当它发生时,我看不出这不会很快变成一个完整的hackaton,用整个地方的引用ID替换实体。
从可维护性的角度来看,我是否遗漏了什么或者 DTO 实际上是唯一可靠的方法?