信息的处理需要经过三大步骤
收集、加工、传递。在
J2EE
体系中,也是如此,总的来说可以如下:
收集:接受来自页面的数据,组装数据到页面,验证数据有效性,装配数据。
加工:进行业务处理,产出各种数据。
传递:组装数据
,
并转为各种格式,传送到目的地。
对于
J2EE
来说:
收集环节集中在视图层。在编程中,最常见的错误就是赋予控制器类过于强大,具体为表现:
1
、引入业务逻辑,导致页面一动,业务逻辑也动。
2
、在向页面传递参数时,既做组装,又做查询,导致职责混乱,不易扩展。
我认为,在这一环节,需要把收集的工作委托给
ViewObject
,并赋予它各种功能,除了修改。
理由如下:
减轻控制类的负担,让控制类更加单一。
ViewObject
是页面的数据容器,把判断功能和查询功能转移到
ViewObject
,可以有效地减少
JS
代码量。
ViewObject
可以防止页面逻辑渗透到业务逻辑层。
如何编写
ViewObject
?
1、
仔细观察原型图,对数据进行分类、归纳。
2、
为每一种概念建立
ViewObject,
再把每个小小的
ViewObject
组装成复合
ViewObject
。
3、
仔细思考,考虑
ViewObject
中的属性可以生成哪些领域对象(
DomainObject
),然给
ViewObjec
添加
CreateXXXX
等方法,或者引入
Factory
模式,解耦
DomainObject
和
ViewObject
。
4、
为
ViewObject
增加验证函数。一来可以控制页面的流转。二来降低页面复杂度。
5、
为
ViewObject
增加
Query
函数。这里
Query
函数不是持久层的查询函数,而是针对集合的查询函数。比如
order.getTotalPrice()
,
item.totalPrice()
。在页面上只要写上“
${order.totalPrice}
”即可获取总价。
加工环节不是本文重点。略过
……………………………
在传递环节,常见的错误就是把组装和转化耦合在一起。
举个例子:某系统要把客户订购的商品,配送,支付,优惠等订单信息。以邮件、传真、页面的形式呈现在客户眼前。
我看到的错误做法是:
1、
写一个邮件模板,写一个
XMlEmailUtil
类。
2、
写一个订单信息页,写一个
ViewOrderInfo
的控制类方法。
3、
写一个传真模板,写一个
XMLFaxUtil
类。
这样做存在以下几个风险:
如果系统决定采用
JSON
格式把订单信息传递给第三方,那么就要在写一个
JsonUtil
类
如果需在订单信息中增加物流信息,那么需要修改
3
个类,三个模板。
正确的做法是:把组装和转化分离。
仔细想想,在信息传递过程中,内容一般不变,通过是表现形式和载体发生了变化。所以要把组装和转化分开,做到“一个组装,多次转化”,修改量也就大大降低。
如何实现:
1、
创建
OrderDTO
,内容为所谓要的数据。
2、
创建
DTOFactory
类
,
添加上
toOrderDTO
方法,用于组装
OrderDTO
类。
3、
创建
XmlOrderBuilder
,根据
OrderDTO
,组装
Xml
数据。
4、
创建
JsonOrderBuilder
,根据
OrderDTO
,组装
Json
数据。
最后不要忘了引入
TDD
。
当然,也有人会问,为什么要写这么多类,太复杂了。我的意见是看需求。假如说,系统只需要把订单信息显示在浏览器上,就不用花时间写来这些代码。万一不是呢,我想这些可以助你一臂之力。
后记:
其实,这篇文章是在与同事的聊天过程中想到的。多多交流才会碰撞出火花。沟通交流必不可少。
分享到:
相关推荐
DTO,全称Data Transfer Object,是软件设计模式中的一种,主要用在分布式系统或Web服务之间,用于数据的传输。DTO对象通常不包含任何业务逻辑,仅仅是数据的载体,使得不同层之间的数据交换变得简单。在这个"登陆的...
在IT行业中,DTO(Data Transfer Object)是一种设计模式,用于在系统之间传递数据,它将业务逻辑层与表现层的数据解耦。标题“分页dto把html写在dto里”和描述“把分页按钮写在dto里,其他dto继承他”表明了一个...
本主题涉及的核心技术是使用Freemarker模板引擎来生成DTO(Data Transfer Object)、DAO(Data Access Object)、RowMapper、BO(Business Object)和服务层代码。这些组件在Spring框架中扮演着重要角色。 1. **...
实体类(Entity Class)通常代表数据库中的表,而DTO(Data Transfer Object)则用于在不同层之间传递数据,以避免直接暴露数据库对象。以下是对这个主题的详细说明: 1. **数据库表与实体类**: - **数据库表**:...
在软件开发过程中,数据传输对象(Data Transfer Object, DTO)是一种常见的设计模式,用于在系统之间传递大量数据。DTO不包含任何业务逻辑,主要是数据容器。在这个场景中,"快速生成DTO"指的是利用Excel模板来自动...
DTO(Data Transfer Object)设计模式是一种在分布式系统中广泛使用的设计模式,它的主要目的是为了在系统组件之间传递数据。在大型应用程序中,特别是在服务层和表示层之间,DTO扮演着重要角色,因为它们能有效地...
在IT行业中,尤其是在Java开发领域,数据传输对象(DTO,Data Transfer Object)是一种常见的设计模式,用于在系统组件之间传递数据。"导入Excel快速生成DTO"这个标题暗示了一个工具或库,它能帮助开发者从Excel文件...
DTO(Data Transfer Object)代码自动生成器是一种工具,旨在帮助开发者快速、高效地根据数据库模型创建对应的Java实体类。在软件开发过程中,DTO通常用于在系统不同层之间传递数据,避免了直接暴露业务对象,降低了...
这个库的名称可能暗示了它与电子竞技游戏《英雄联盟》(League of Legends,简称LoL)的数据传输对象(Data Transfer Object, DTO)处理有关,DTO是软件设计模式中的一种,用于在系统不同层之间传递数据。...
"java_dao_dto生成器" 是一个工具,它自动化了创建DAO层和DTO(Data Transfer Object)的过程。DTO是用于在系统不同组件之间传递数据的对象,通常用来避免直接暴露底层数据结构。在Java开发中,手动编写这些类可能会...
在这个“feignclient发送get请求使用dto接收参数demo”中,我们将探讨如何利用FeignClient来发送GET请求,并通过DTO(Data Transfer Object)来接收和处理参数。 1. **FeignClient介绍** Feign是一个Java到Java的...
在软件开发中,视图对象(View Object,简称VO)和数据传输对象(Data Transfer Object,简称DTO)是两种常见的设计模式,它们在系统架构中起着至关重要的作用。这两种对象主要用于解决数据模型与界面展示之间的数据...
DTO数据传输对象简介PPT
在分布式系统的设计中,DTO(Data Transfer Object,数据传输对象)是一种非常重要的概念和技术手段。当客户端需要与服务器端进行交互时,尤其是在涉及大量的数据交换场景下,传统的做法可能会带来一系列的问题。...
在Java开发中,数据传输对象(DTO)和持久化对象(POJO)是常见的概念,它们用于在不同层之间传递数据。手动创建这些类可能会耗费大量时间,特别是在处理大量数据库表时。因此,"eclipse插件,根据数据库表自动生成...
在软件开发中,数据传输对象(Dto,Data Transfer Object)和实体类(Entity Class)是两种常见的对象模型,它们在不同的场景中各自扮演着重要的角色。Dto主要用于在系统组件之间传递数据,而实体类通常代表数据库中...
在IT行业中,开发人员经常需要处理数据传输对象(DTO)的创建,这通常是将数据库模型转化为业务层或视图层所需的格式。手动编写这些DTO类可能会导致大量的重复代码,增加维护成本,同时也容易引入错误。为了解决这个...
Dto(Data Transfer Object)和JavaBean是Java编程中常见的两种对象模式,它们在软件开发中扮演着重要角色,尤其是在数据交换和模型表示方面。这里我们将深入探讨这两种对象以及如何通过工具自动化生成它们,并且...
本文将详细介绍VO (View Object)、DTO (Data Transfer Object)、BO (Business Object)、ORM (Object Relational Mapping)、DAO (Data Access Object)、Entity (实体)、DO (Data Object)、PO (Persistent Object)、...