`

RichDomainObject的架构设计中,是否可以抛弃DAO?

阅读更多
2、3年过去了,没想到最近Javaeye又有了对Domain设计的热贴,安耐不住,说说自己的想法。

2年前有过尝试RichDomainObject的设计,当时使用的hibernate2+SessionBean。

发现DomainObject必须要依赖Dao(一些业务逻辑执行前,需要对之前产生的DomainObject进行查询或汇总,根据结果判定执行逻辑);
同时为了查询的灵活,Service必须同时依赖Dao和DomainObject

这样整个Server,实际上包括了4种东西:
Service、
ServiceDAO(ReadOnly)、
DomainObject、
DomainDAO(Read/Write)。

另外在Service层和各种Client端(Web/Swing/JavaApplication等)之间使用DTO传递数据。
注意DTO并不是与DomainObject一一对应的的PO无逻辑简化版本,相反DTO是与界面相关的,同一个DomainObject可能根据客户端(界面)的不同,有多个DTO与之对应。(演化到后来DTO变为了由集合、数组、String、Date、Integer等java基础类组合的一个数据结构,系统本身并不存在具体的DTO类,因为数据到界面后只为显示,并没有任何逻辑,无须用对象实现)。

这样的架构下,感觉DAO的处理上实在是繁琐的很,时时有绕过它直接使用hibernate的冲动!

技术在不断进化,JPA的出世,让我看到了一丝希望。

反思一下DAO出现的原始用意:
1)隔离数据库(JDBC)操作。[分层、弱化程序对数据库的直接依赖]
2)简化数据库间移植。[隔离具体数据库接口(SQL)细节,解除厂家邦定]

目前的JPA似乎完全满足了上面两种需求。

而且(JPA)是JAVA持久化API,不是JAVA数据库连接API(JDBC),其从概念上也是不依赖数据库的(完全有可能实现一个使用文件系统/XML进行持久化的JPA)。
同时,JPA本身也是一个隔离层,虽然目前作的不太完美,不过仍然给了你一个可以切换各种不同的JPA实现的机会。

现在看来我们是否可以抛弃DAO了呢?
让代码直接依赖java的标准api--JPA,就像依赖java.util一样?

分享到:
评论
5 楼 giscat 2007-05-14  
pig345 写道
giscat 写道
如果你是老大,怎么玩都可以
当然包括自虐

技术讨论帖子,为什么要有嘲讽和人身攻击?请明确解释你的看法。


非常诚恳地声明一下:
并没有嘲讽和人身攻击嘛
切勿多愁善感,否则后果自负
4 楼 lighter 2007-05-14  
相关的讨论,看如下:
http://www.iteye.com/topic/56949
这样的问题,即使争论不休也得不出什么结果的,不过标题惹人眼球
3 楼 pig345 2007-05-14  
giscat 写道
如果你是老大,怎么玩都可以
当然包括自虐

技术讨论帖子,为什么要有嘲讽和人身攻击?请明确解释你的看法。
2 楼 giscat 2007-05-14  
如果你是老大,怎么玩都可以
当然包括自虐
1 楼 pig345 2007-05-14  
顺便说一下,本人极其不赞成使用BO(业务逻辑) extends PO(持久化)= DomainObject 的方式,虽然从代码上看,好像还算干净漂亮。
但是要知道,DomainObject是领域对象,他的extends应该体现业务逻辑对象之间的天然继承关系,而不要将这(在JAVA这种单继承静态类型语言里面是极其)宝贵的资源浪费到具体实现手段上!

相关推荐

    基于JSP+Servlet+JavaBean+JDBC+DAO的Web图书管理架构设计该系统

    基于JSP+Servlet+JavaBean+JDBC+DAO的Web架构设计该系统,进一步了解并掌握如何对数据库进行操作,以及如何分析、设计一个应用系统。 需求要求: 该系统的基本需求是,系统要实现如下的基本管理功能: (1)用户分为...

    DAO设计模式 DAO 设计模式 JAVA设计模式

    在Java开发中,DAO模式通常与其他设计模式结合使用,如工厂模式(创建DAO实例)、策略模式(根据策略选择不同的数据访问方式)、单例模式(管理全局唯一的DAO实例)等,以进一步提升系统的灵活性和可维护性。...

    企业级业务架构设计方法论.pdf

    3. 提高业务架构设计效率:企业级业务架构设计方法论可以帮助企业提高业务架构设计效率,包括业务逻辑层、数据访问层、界面服务、DAO、数据库、Oracle等。 企业级业务架构设计方法论是企业级业务架构设计的核心部分...

    基于DAO工厂模式的三层架构示例项目源码

    这个项目源码可以作为一个学习和参考的实例,帮助开发者理解如何在实际项目中运用DAO工厂模式来构建三层架构的应用,提高代码的可维护性和可扩展性。通过阅读和分析源码,我们可以学习如何组织和设计这样的系统,...

    Dao设计模式教程

    DAO(Data Access Object)设计模式是一种软件设计模式,它用于封装对数据库的所有访问,从而将业务逻辑和数据访问逻辑分离开来。DAO模式的核心思想是创建一个接口或抽象类,代表一个特定的数据操作,然后创建该接口...

    2017年下半年系统架构设计师考试下午真题(完整版).pdf

    系统架构设计师考试是中国计算机技术职业资格与水平考试中的一项重要考试,主要针对从事系统架构设计的高级技术人才。考试内容涵盖系统架构设计的基础知识、实际案例分析、设计工具和方法等,其中案例分析题的考察尤...

    DAO设计模式(工厂+代理)

    在DAO设计模式中,我们可以创建一个DAOFactory,它根据传入的参数(如数据库类型)返回相应的DAO实例。这样,代码在需要使用DAO时,只需要调用工厂方法,而无需直接new某个特定的DAO,增加了系统的灵活性。 例如: ...

    MVC三层架构+DAO工厂模式进行JAVA WEB开发

    在Java Web开发中,MVC(Model-View-Controller)三层架构和DAO(Data Access Object)工厂模式是两种常见的设计模式,它们对于构建高效、可维护的系统至关重要。本项目结合这两种模式,旨在提高代码组织的清晰度和...

    架构设计入门教程基础篇

    《架构设计入门教程基础篇》是一份针对初学者的架构设计指南,旨在帮助读者了解和掌握软件架构设计的基础知识。架构设计是软件开发过程中的关键环节,它涉及到系统整体结构的规划,确保软件的可扩展性、可维护性和...

    基于DAO设计模式的新闻发布系统

    在这个基于DAO设计模式的新闻发布系统中,我们可以深入探讨以下几个核心知识点: 1. DAO设计模式:DAO模式的核心思想是创建一个接口,该接口定义了对数据存储的通用操作,然后实现这个接口以处理具体的数据库交互。...

    DAO设计模式辅助资料

    在学习DAO设计模式的过程中,可以参考博客"设计模式5——DAO",该博客可能是对DAO模式的深入讲解,包括原理、优缺点、使用场景以及实践案例。同时,通过阅读这个压缩包中的"dao"文件,你可能能获取更具体的实现示例...

    dao设计模式视频教程

    DAO(Data Access Object)设计模式是一种在软件工程中常见的...这将对你的编程技能和软件架构设计能力有显著提升,特别是对于初学者来说,这是一个很好的起点,能够帮助你更好地理解和掌握数据访问层的设计与实现。

    J2EE之DAO设计模式

    当底层数据存储实现不需要发生改变时,该策略可以使用工厂方法设计模式实现,来产生应用中所需的DAO. 当底层数据储存实现不得不发生变化的时候, 我们可以用抽象工厂模式来实现这个策略. 在当前情况,可以提供一个抽象...

    JSP+Servlet+AJAX的dao设计模式

    在Web开发中,DAO(Data Access Object)设计模式是一种常用的设计模式,用于将业务逻辑与数据访问层进行解耦,提高代码的可维护性和可复用性。本篇我们将深入探讨如何在JSP、Servlet和AJAX的环境中应用DAO设计模式...

    2017年下半年 系统架构设计师 案例分析

    ### 2017年下半年 系统架构设计师案例分析 #### 考试背景与目的 本考试旨在考察考生对于系统架构设计的理解与应用能力,特别是对于软件架构评估及设计的具体掌握情况。通过案例分析的形式,让考生能够在实际场景中...

    j2ee 架构设计 (SSH典型结构解析)

    在本文中,我们将深入探讨基于Java的企业级应用架构设计,特别是SSH(Struts、Spring、Hibernate)框架的典型结构解析。SSH是Java EE领域中广泛使用的开源框架组合,用于构建高效、灵活和可扩展的Web应用程序。 ...

    DAO设计模式DAO设计模式

    数据访问对象(Data Access Object,简称DAO)设计模式是一种在软件工程特别是企业级应用开发中非常常见的设计模式。它的主要目的是分离业务逻辑与数据访问逻辑,使系统架构更为清晰,提高模块间的解耦度。这种模式...

    Dao设计模式

    DAO设计模式是Java开发中常用的一种数据访问模式,它将底层数据访问操作与上层业务逻辑相分离。这一模式的目的在于封装所有对数据源的访问,并提供抽象接口,使得业务逻辑层与数据访问层解耦,从而降低业务代码与...

Global site tag (gtag.js) - Google Analytics