I C.
基本全部同意。唯一保留的一点是这样的设计还算不算DTO。因为已经完全没有DTO的原来意思了。
其实上面关于 AJAX 的讨论和这个话题也有些关系,原因是这样的:
象DTO这样,以“粗化粒度”为精髓的模式,除了在持久层以外,也出现在表现层。表现层里出现 FORMBEAN 的原因,在本质上是试图减少 HTTP 通信的逻辑产物。正是因为HTML应用普遍的模式是整个FORM一起提交,才造成了JAVA端以 FORMBEAN 来抽象客户端输入的作法。而整个FORM整体提交,是以减少 HTTP 流量为出发点的。
试想,在 MFC 时代,那是的 DOCUMENT-VIEW架构相当于今天的MFC,但是MFC里的DOCUMENT很少有象 FORMBEAN 这样与 UI 输入元素一一对应的。甚至于,DOC-VIEW的经典范例常常是一个DOCUMENT多个VIEW。这个现象的根本原因,是在 RICH CLIENT 场景架构下网络传输速率不是重要限制因素,所以CLIENT-SERVER之间的交互没有必要以整个表单为单位,而可以做到高度的互动(比如 TAB-OUT 立即出发后台业务响应,并根据结果动态更新表单项目)。这种通信模式反应在程序里,就是DOCUMENT往往有更灵活多样的数据结构。比如,DOCUMENT可以只包含一个DCOM构件的REFERENCE,而不缓存屏幕输入。
这就引出了 AJAX 对 JAVA/DTO 在架构方面的影响。如果客户端用 AJAX 实施,那么数据通信模式就类似与C/S架构:从整个FORM的间发式提交、整个PAGE的整体重新RENDER,变成一系列连续的小请求,小响应通信。并且由于请求和响应都是程序可以控制的XML,所以没有额外的HTML开销。在这样的通信模式下,JAVA服务器端的数据模型就不必非要保持一个在本质上是“粗粒度缓存”的FORMBEAN,而可以有更多灵活性。
归根结底,“模式”的选择,应该根据底层技术和应用场景的特性。
> 你太客气了,叫我“老版”就可以,实际是个老版主。
> 你的观点我是同意的:当将实体Bean
> 变成一个POJO,并且实体Bean必须由本地Session调用之后,D
> O在性能使用上没有意义了。
>
> 作为交流,我还是说出一些我个人看法,现在我都犹豫了(说
> 鲎约合敕ū蝗巳衔墙暇?;不说出被人认为是无科学精神,呵
> 牵嫘Γ一故撬邓担挡欢ㄎ宜嘉行┪侍饽亍?
>
> 我看DTO模式历史是这样的:
> 最早是VO也就是ValueObject,
> 后来,TSS那个架构师编写的"EJB模式"(至今还在TSS右边挂?
> 呢,在EJB方面,TSS比我还死挺),将ValueObject称为DTO模
> 剑⑶一瓜晗杆得髁DTO模式的几个变种,算是专业厉害了,
> 罄J2EE Core
> Patterns也使用DTO替代它以前版本的VO了,当然这两者先后?
> 重要。
>
> 一般模式使用是没有实际作用的(只是纯设计要求,不用这个
> J匠绦蛘昭梢耘埽皇裁戳窖凇EJB模式”中,认为
> 褂DTO模式可以省却客户端和EJB之间的通讯,将所有的数据?
> 对象打包成一个对象传到EJB层,而不是一个参数一个参数的?
> 送,每次传送都有可能涉及远程通讯和序列化,那多耗费性能
> ?
>
> 后来,Hibernate出现了,提出数据的POJO,实际是VO概念,?
> 这种情况下,VO和Domain
> Model可以合二为一,按照DTO模式定义:Data Transfer
> Object,这时Domain
> Model也是DTO模式实现一种,Model直接作为数据传送啊。所?
> ,这种情况下:VO Domain Model
> 或DTO都是同一个东西,我觉得讨论他们区别没有意义,当该?
> 象作为类图分析实现时,它是Domain
> Model;当该对象作为数据传送,它是DTO/VO。
>
> DTO模式什么情况下不是Domain
> Model呢,就是我上帖举的例子,他不是从域模型驱动分析设?
> 开发的,而是基于传统的数据库驱动设计,首先设计出数据库
> 偈褂OR框架导出一个附属结果,这个附属结果并不是Domai
> Model,而是一个DTO,单纯传送数据用,这就造成了系统混?
> 。
>
> 不知我有无表达明白?这是我目前的想法,可能与一些权威思
> 氩灰恢拢蚕M涣魈岣摺?
>