我希望它可以这么简单。尽管 DTO 源于系统的网络分布层,但如果将域对象返回到视图层,则可能会出现大量问题。这里是其中的一些:
1.通过将域对象暴露给视图层,视图可以了解域对象的结构,这让视图可以对相关对象如何可用做出一些假设。例如,如果域对象“Person”被返回到它“绑定”到的视图,而在其他一些视图上,Person 的“地址”将被绑定,应用程序层将倾向于使用类似的语义person.getAddresse() woukd 失败,因为此时地址域对象可能尚未加载。本质上,随着域对象对视图层可用,视图总是可以对数据如何可用做出假设。
2.) 当域对象绑定到视图时(在胖客户端中更是如此),以视图为中心的逻辑总是会潜入这些对象中,使它们在逻辑上被破坏。
基本上,根据我的经验,我已经看到使域对象可用于视图会产生架构问题,但是使用 DTO 也存在问题,因为使用 DTO 在创建汇编程序(DTO 到域对象和反向)方面会产生额外的工作,类似的对象,例如 Patient 域对象、Patient DTO 以及可能绑定到视图的 Patient bean。
显然,在一个胖客户端系统中,这个问题没有正确的答案。
我借用了这个简短但不完整但对 DTO 陈词滥调的真实答案:
http ://www.theserverside.com/discussions/thread.tss?thread_id=32389#160505