`
SilenceCliff
  • 浏览: 38432 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

Open Session in View 、DTO、ForceLoad?????

阅读更多
        

    如果不是在.net下的DataSet(数据源控件)DataGrid(数据绑定控件)下进行企业开发的话,多半会使用分层的机制进行并行开发。

O/R Mapping IoC Container再到Web Framework.逻辑分层深入人心。

     分层,然后对象也细分了,Entityvalue objectpersistence object, 协作对象,业务对象……

    别的不想多说,只说说DTO的历史,以及Web开发中遇到的Open Session in View

    DTO其前身是VO,值对象,其出现环境是作为EJB的补丁模式出现,以求解决多次跨越多个层次的数据传输问题。并且通过粗粒度的数据访问接口减少远程调用的次数,以提高整个基于EJB的分布式应用的性能。

    而今,实践证明,逻辑分层并不适合物理分层,(layer != tier )。Web 应用的并置往往得到更好的性能。这种系统级的重构,大大削弱了DTO这个模式的存在价值。没有性能的提高,反之,需要编写大量的代码。不少人把DTO纳入了后EJB 时代的反模式之列。

捍卫DTO的人自然也有他们的辩护,VO并不总是等于PO,有时POVO小,有时又比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 DTOCuston DTO Data Transfer HashMapDataTransfer Rowset

而在《Core J2EE Pattern DAO的策略有着类似的分类。

可见,要么是DTO多样话,要么是DAO提供的数据访问接口多样化。

要么是定制几个初始化级别不同的DTO,要么是通过不同的DAO接口返回初始化程度不同的PO(或VO

似乎天下永远没有免费的午餐。利弊权衡永远的由你自己左右。最近公司的一个产品就打算使用定制更多DAO接口通过 Hibernate.Initialize强制加载实体的更个字段。

这样解决延迟加载,以求绕过Open Session in ViewDTO。那么代价呢?

更多的DAO方法。DAO的不可移植?………………

还在权衡中……

 

分享到:
评论

相关推荐

    微服务之间如何共享DTO?

    DTO(Data Transfer Object),数据传输对象,作为一种跨服务边界传输数据的手段,扮演着重要的角色。本文主要探讨了如何在微服务之间有效地共享DTO。 首先,微服务之间的通信通常基于RESTful API,而DTO就是这种...

    JAVA中的POJO、VO、PO、DO、DTO都是什么?有什么区别?

    3. VO(View Object):视图对象,主要用于表现层,如JSP页面或Web服务的响应。VO包含了展示数据所需的所有属性,通常不含任何业务逻辑,只用于数据的展示。它们是将数据从服务层传递到前端展示时使用的中间对象,...

    分页dto把html写在dto里

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

    登陆的dto.zip

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

    快速生成DTO

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

    数据库表转实体类和DTO

    数据库表转实体类和DTO是软件开发中一个常见的任务,特别是在Java后端开发中,它涉及到数据模型的设计和数据访问层的操作。实体类(Entity Class)通常代表数据库中的表,而DTO(Data Transfer Object)则用于在不同...

    导入Excel快速生成DTO

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

    DTO设计模式.docx

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

    kingdao自动生成DAO/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 ...

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

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

    简单的EntityFramework4.3+三层+DTO 简单Demo

    简单的EntityFramework4.3+三层+DTO,如果需要简化版的,我的资源里有一个不含DTO的版本。 这个Demo的主要功能是: 1、实体类的创建、复杂类型的嵌套 2、实体类的配置(主键、外键、一对一、1对多,多对多) 3、...

    java_dao_dto生成器

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

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

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

    DTO数据传输对象简介PPT

    DTO数据传输对象简介PPT

    DTO代码自动生成器

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

    java DTO 详解

    ### Java DTO 详解 #### 一、什么是DTO 在分布式系统的设计中,DTO(Data Transfer Object,数据传输对象)是一种非常重要的概念和技术手段。当客户端需要与服务器端进行交互时,尤其是在涉及大量的数据交换场景下...

    Python库 | lol_dto-0.1a10.tar.gz

    《Python库:lol_dto-0.1a10.tar.gz 深度解析》 在编程领域,Python因其简洁的语法和丰富的库支持而备受青睐。本文将深入探讨一个名为"lol_dto"的Python库,具体版本为0.1a10,其资源以压缩包形式提供——"lol_dto-...

    Dto转实体类 AutoMapper

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

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

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

    Dto,javaBean,带注释自动生成

    Dto(Data Transfer Object)和JavaBean是Java编程中常见的两种对象模式,它们在软件开发中扮演着重要角色,尤其是在数据交换和模型表示方面。这里我们将深入探讨这两种对象以及如何通过工具自动化生成它们,并且...

Global site tag (gtag.js) - Google Analytics