为什么需要DTO

javaeye上有一篇帖子 – 为什么我的程序传递DTO
讨论了Domain Objec和DTO(Data Transfer Object)的关系,以及用Domain Object代替DTO的可能。我比较赞同其中的一个观点:

得出传递DTO不必要的结论,多半是因为应用过于简单,或者对于构建RichDomainModel缺乏经验导致的。完全OO的DomainModel,确实是值得追求的。

其实说来说去都是依赖谁的问题 – 是依赖Domain Object?还是只依赖服务层?这时就又有一个分歧了,Domain Object到底在你的心目中有多重?而这个问题在每个人的脑子都是不一样的。有时候这样的出发点的差异只会造成每个人都在固守己见而不去关心理解别人的着重点,最终变成毫无意义的争论。而没有对不同的情况系统的分析。

基本的几个着眼点:
1.觉得重复代码很多 – 想办法去写个类似hibernate的工具去帮忙 – 个人觉得已经从山脚下就跑偏了,只能绕着山脚跑
2.Domain Object是充血还是贫血
3.对Domain Object的依赖应该到persist layer,而服务层是面向更多不同的client(local的,remote的)去调用的,所以要避免对Domain Object的依赖,因为可能会暴露业务逻辑,或者存在Domain Object生命周期的问题(比如lazy load)。我觉得这一点却是要看的,如果认为Domain Object 只= (PO)Persistent Object,那么后一种论调可以合理解释。但是如果是纯粹的领域模型设计,那么所有的东西都应该也可以依赖 Domain Object,即便增加了DTO这个(说白了可以理解为Domain Object的proxy的东东)也还是存在Domain Object频繁变化带来的问题(这是个伪问题,领域对象变化的影响当然要“深远”,不可能用DTO来避免)

所以我的结论仍然是: It depends!

Comments are closed.