如果不是在.net下的DataSet(数据源控件)和DataGrid(数据绑定控件)下进行企业开发的话,多半会使用分层的机制进行并行开发。
从O/R Mapping 到IoC Container再到Web Framework.逻辑分层深入人心。
分层,然后对象也细分了,Entity、value object、persistence object, 协作对象,业务对象……
别的不想多说,只说说DTO的历史,以及Web开发中遇到的Open Session in View。
DTO其前身是VO,值对象,其出现环境是作为EJB的补丁模式出现,以求解决多次跨越多个层次的数据传输问题。并且通过粗粒度的数据访问接口减少远程调用的次数,以提高整个基于EJB的分布式应用的性能。
而今,实践证明,逻辑分层并不适合物理分层,(layer != tier )。Web 同 应用的并置往往得到更好的性能。这种系统级的重构,大大削弱了DTO这个模式的存在价值。没有性能的提高,反之,需要编写大量的代码。不少人把DTO纳入了后EJB 时代的反模式之列。
捍卫DTO的人自然也有他们的辩护,VO并不总是等于PO,有时PO比VO小,有时又比VO要大。此外,如果直接把PO放到界面上,会产生两点问题:一、数据存储实际上越过了逻辑层,直接在表现层和持久层之间传递。二、表现层开发依赖于数据库表,并行开发受到影响。
Rod Johson在《J2EE without EJB》中,似乎也是倾向使用PO直接呈现到界面上,我的判断是基于他提到的Open Session in View这样一个界面渲染时解决PO延迟加载的问题。
问题很明显了,如果使用DTO 或者 VO,那么根本不用担心这类延迟加载的问题。代价是必须维护更多的DTO。
但是如果我两者的负担都不想要呢?
最简单的方案就是——不要延迟加载,这很暴力原始,但显然在多数情况下,这样的简单导致的性能乏善可陈是我们不能接受的。
那么还有办法吗?
再回过头去看看DTO 和DAO。
DTO发展自 VO,既而TSS上的人更是精雕细琢,DTO 又产生了若干种类。
《EJB Design Pattern》中列举的就包括:Domain DTO、Custon DTO 、Data Transfer HashMap、DataTransfer Rowset。
而在《Core J2EE Pattern》 中DAO的策略有着类似的分类。
可见,要么是DTO多样话,要么是DAO提供的数据访问接口多样化。
要么是定制几个初始化级别不同的DTO,要么是通过不同的DAO接口返回初始化程度不同的PO(或VO)
似乎天下永远没有免费的午餐。利弊权衡永远的由你自己左右。最近公司的一个产品就打算使用定制更多DAO接口通过 Hibernate.Initialize强制加载实体的更个字段。
这样解决延迟加载,以求绕过Open Session in View和DTO。那么代价呢?
更多的DAO方法。DAO的不可移植?………………
还在权衡中……
分享到:
相关推荐
DTO(Data Transfer Object),数据传输对象,作为一种跨服务边界传输数据的手段,扮演着重要的角色。本文主要探讨了如何在微服务之间有效地共享DTO。 首先,微服务之间的通信通常基于RESTful API,而DTO就是这种...
3. VO(View Object):视图对象,主要用于表现层,如JSP页面或Web服务的响应。VO包含了展示数据所需的所有属性,通常不含任何业务逻辑,只用于数据的展示。它们是将数据从服务层传递到前端展示时使用的中间对象,...
在IT行业中,DTO(Data Transfer Object)是一种设计模式,用于在系统之间传递数据,它将业务逻辑层与表现层的数据解耦。标题“分页dto把html写在dto里”和描述“把分页按钮写在dto里,其他dto继承他”表明了一个...
DTO,全称Data Transfer Object,是软件设计模式中的一种,主要用在分布式系统或Web服务之间,用于数据的传输。DTO对象通常不包含任何业务逻辑,仅仅是数据的载体,使得不同层之间的数据交换变得简单。在这个"登陆的...
在软件开发过程中,数据传输对象(Data Transfer Object, DTO)是一种常见的设计模式,用于在系统之间传递大量数据。DTO不包含任何业务逻辑,主要是数据容器。在这个场景中,"快速生成DTO"指的是利用Excel模板来自动...
数据库表转实体类和DTO是软件开发中一个常见的任务,特别是在Java后端开发中,它涉及到数据模型的设计和数据访问层的操作。实体类(Entity Class)通常代表数据库中的表,而DTO(Data Transfer Object)则用于在不同...
在IT行业中,尤其是在Java开发领域,数据传输对象(DTO,Data Transfer Object)是一种常见的设计模式,用于在系统组件之间传递数据。"导入Excel快速生成DTO"这个标题暗示了一个工具或库,它能帮助开发者从Excel文件...
DTO(Data Transfer Object)设计模式是一种在分布式系统中广泛使用的设计模式,它的主要目的是为了在系统组件之间传递数据。在大型应用程序中,特别是在服务层和表示层之间,DTO扮演着重要角色,因为它们能有效地...
modify the property file of the database path, driver, user name, password, enter CMD to the D drive is running java-jar kingdao.jar disk in D test folder under the root directory of DAO and DTO ...
在IT行业中,开发人员经常需要处理数据传输对象(DTO)的创建,这通常是将数据库模型转化为业务层或视图层所需的格式。手动编写这些DTO类可能会导致大量的重复代码,增加维护成本,同时也容易引入错误。为了解决这个...
简单的EntityFramework4.3+三层+DTO,如果需要简化版的,我的资源里有一个不含DTO的版本。 这个Demo的主要功能是: 1、实体类的创建、复杂类型的嵌套 2、实体类的配置(主键、外键、一对一、1对多,多对多) 3、...
"java_dao_dto生成器" 是一个工具,它自动化了创建DAO层和DTO(Data Transfer Object)的过程。DTO是用于在系统不同组件之间传递数据的对象,通常用来避免直接暴露底层数据结构。在Java开发中,手动编写这些类可能会...
在Java开发中,数据传输对象(DTO)和持久化对象(POJO)是常见的概念,它们用于在不同层之间传递数据。手动创建这些类可能会耗费大量时间,特别是在处理大量数据库表时。因此,"eclipse插件,根据数据库表自动生成...
DTO数据传输对象简介PPT
DTO(Data Transfer Object)代码自动生成器是一种工具,旨在帮助开发者快速、高效地根据数据库模型创建对应的Java实体类。在软件开发过程中,DTO通常用于在系统不同层之间传递数据,避免了直接暴露业务对象,降低了...
### Java DTO 详解 #### 一、什么是DTO 在分布式系统的设计中,DTO(Data Transfer Object,数据传输对象)是一种非常重要的概念和技术手段。当客户端需要与服务器端进行交互时,尤其是在涉及大量的数据交换场景下...
在这个“feignclient发送get请求使用dto接收参数demo”中,我们将探讨如何利用FeignClient来发送GET请求,并通过DTO(Data Transfer Object)来接收和处理参数。 1. **FeignClient介绍** Feign是一个Java到Java的...
《Python库:lol_dto-0.1a10.tar.gz 深度解析》 在编程领域,Python因其简洁的语法和丰富的库支持而备受青睐。本文将深入探讨一个名为"lol_dto"的Python库,具体版本为0.1a10,其资源以压缩包形式提供——"lol_dto-...
在软件开发中,数据传输对象(Dto,Data Transfer Object)和实体类(Entity Class)是两种常见的对象模型,它们在不同的场景中各自扮演着重要的角色。Dto主要用于在系统组件之间传递数据,而实体类通常代表数据库中...
Dto(Data Transfer Object)和JavaBean是Java编程中常见的两种对象模式,它们在软件开发中扮演着重要角色,尤其是在数据交换和模型表示方面。这里我们将深入探讨这两种对象以及如何通过工具自动化生成它们,并且...