`
sing100star
  • 浏览: 28552 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

运用ViewObject收集信息,利用DTO传递信息

阅读更多

信息的处理需要经过三大步骤 收集、加工、传递。在 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.zip

    DTO,全称Data Transfer Object,是软件设计模式中的一种,主要用在分布式系统或Web服务之间,用于数据的传输。DTO对象通常不包含任何业务逻辑,仅仅是数据的载体,使得不同层之间的数据交换变得简单。在这个"登陆的...

    分页dto把html写在dto里

    在IT行业中,DTO(Data Transfer Object)是一种设计模式,用于在系统之间传递数据,它将业务逻辑层与表现层的数据解耦。标题“分页dto把html写在dto里”和描述“把分页按钮写在dto里,其他dto继承他”表明了一个...

    Java利用Freemarker模板自动生成dto、dao、rowmapper、bo、service代码

    本主题涉及的核心技术是使用Freemarker模板引擎来生成DTO(Data Transfer Object)、DAO(Data Access Object)、RowMapper、BO(Business Object)和服务层代码。这些组件在Spring框架中扮演着重要角色。 1. **...

    快速生成DTO

    在软件开发过程中,数据传输对象(Data Transfer Object, DTO)是一种常见的设计模式,用于在系统之间传递大量数据。DTO不包含任何业务逻辑,主要是数据容器。在这个场景中,"快速生成DTO"指的是利用Excel模板来自动...

    DTO设计模式.docx

    DTO(Data Transfer Object)设计模式是一种在分布式系统中广泛使用的设计模式,它的主要目的是为了在系统组件之间传递数据。在大型应用程序中,特别是在服务层和表示层之间,DTO扮演着重要角色,因为它们能有效地...

    数据库表转实体类和DTO

    实体类(Entity Class)通常代表数据库中的表,而DTO(Data Transfer Object)则用于在不同层之间传递数据,以避免直接暴露数据库对象。以下是对这个主题的详细说明: 1. **数据库表与实体类**: - **数据库表**:...

    DTO代码自动生成器

    DTO(Data Transfer Object)代码自动生成器是一种工具,旨在帮助开发者快速、高效地根据数据库模型创建对应的Java实体类。在软件开发过程中,DTO通常用于在系统不同层之间传递数据,避免了直接暴露业务对象,降低了...

    导入Excel快速生成DTO

    在IT行业中,尤其是在Java开发领域,数据传输对象(DTO,Data Transfer Object)是一种常见的设计模式,用于在系统组件之间传递数据。"导入Excel快速生成DTO"这个标题暗示了一个工具或库,它能帮助开发者从Excel文件...

    Python库 | lol_dto-0.1a10.tar.gz

    这个库的名称可能暗示了它与电子竞技游戏《英雄联盟》(League of Legends,简称LoL)的数据传输对象(Data Transfer Object, DTO)处理有关,DTO是软件设计模式中的一种,用于在系统不同层之间传递数据。...

    java_dao_dto生成器

    "java_dao_dto生成器" 是一个工具,它自动化了创建DAO层和DTO(Data Transfer Object)的过程。DTO是用于在系统不同组件之间传递数据的对象,通常用来避免直接暴露底层数据结构。在Java开发中,手动编写这些类可能会...

    feignclient发送get请求使用dto接收参数demo

    在这个“feignclient发送get请求使用dto接收参数demo”中,我们将探讨如何利用FeignClient来发送GET请求,并通过DTO(Data Transfer Object)来接收和处理参数。 1. **FeignClient介绍** Feign是一个Java到Java的...

    视图对象(VO、DTO)的应用!

    在软件开发中,视图对象(View Object,简称VO)和数据传输对象(Data Transfer Object,简称DTO)是两种常见的设计模式,它们在系统架构中起着至关重要的作用。这两种对象主要用于解决数据模型与界面展示之间的数据...

    DTO数据传输对象简介PPT

    DTO数据传输对象简介PPT

    java DTO 详解

    在分布式系统的设计中,DTO(Data Transfer Object,数据传输对象)是一种非常重要的概念和技术手段。当客户端需要与服务器端进行交互时,尤其是在涉及大量的数据交换场景下,传统的做法可能会带来一系列的问题。...

    eclipse插件,根据数据库表自动生成DTO(pojo)插件

    在Java开发中,数据传输对象(DTO)和持久化对象(POJO)是常见的概念,它们用于在不同层之间传递数据。手动创建这些类可能会耗费大量时间,特别是在处理大量数据库表时。因此,"eclipse插件,根据数据库表自动生成...

    Dto转实体类 AutoMapper

    在软件开发中,数据传输对象(Dto,Data Transfer Object)和实体类(Entity Class)是两种常见的对象模型,它们在不同的场景中各自扮演着重要的角色。Dto主要用于在系统组件之间传递数据,而实体类通常代表数据库中...

    Any2Dto插件,可以根据数据库和JavaCode生成强类型且精确字段的DTO

    在IT行业中,开发人员经常需要处理数据传输对象(DTO)的创建,这通常是将数据库模型转化为业务层或视图层所需的格式。手动编写这些DTO类可能会导致大量的重复代码,增加维护成本,同时也容易引入错误。为了解决这个...

    VO / DTO / BO / ORM DAO entity DO PO/ POJO(分层领域模型规约)整理

    本文将详细介绍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)、...

    java术语(PO/POJO/VO/BO/DAO/DTO)

    DTO与VO类似,也是用于数据传输,但DTO通常跨越网络边界,比如在Web服务中,服务器端的业务数据通过DTO传递到客户端。DTO可能会包含多个VO对象的组合,以适应更复杂的传输需求。 这六种对象在实际项目开发中起到...

Global site tag (gtag.js) - Google Analytics