首先,老帖子了,记得前几个月突然心血来朝发的,都是我个人的一些经验之谈,目前就是为了让我们的程序结构更清晰一些,能更加减少我们的工作量。 没想到还有朋友能够过来关心一下,十分感动。谢谢你们。 后面有些我今天的补充,大家随便看看,有什么好的建议提一提,交流交流。
看见论坛上有人对页面是否100%对于DAO有比较大的分歧。
从目前的开发模式来看,更多的是根据需求建立表。之后对表进行操作。撇开领域模型不谈。DAO层的操作在许多项目中的确是对应着页面。页面有什么需求,我就写什么样的DAO。这样其实也并非不是一个开发的方法,但是,问题出现了。许多项目中有许多相同的DAO操作,比如:登陆,注册。当然,它们之间也许有区别。有些系统要求登陆的时候记录一下它的登陆时间和登陆地址。而有些系统则要求登陆时只要记录一下它的登陆IP就可以了。问题出现了,怎么样我们去复用这个DAO呢?当然,我们不会傻到把这些功能都写到DAO中,我们把DAO需要的操作只留在DAO中,比如:FindUserByLoginName(String loginName)。OK,把之后一些需要判断,等等放到另外的分层中。这样一来,这个DAO可以被复用了。此时,这个DAO也和页面对应了。似乎这样开发也不错。别的项目中需要这个DAO。我就COPY一下,就OK了。但是,COPY不代表复用。
复用(继承与组合)。我们可以把这些DAO封装在一个Package中。当然,你也可以不用这么做。但是,为什么会有人看不习惯页面与DAO完全一样呢?我想还是因为复用这个问题吧。100%的页面对应着DAO,也就说明DAO是根据项目需求写的。没有从别的Package中引入,只是COPY。这样一来,在许多项目中写着许多重复的DAO。
当然,也有许多复用DAO的。把DAO层直接写为泛型。在把这些泛型DAO封装到一个Package中,之后在另外一个项目中直接引入,当成自己的架包使用。但是,这并没有完全100%的复用。因为你还得去做一些事情,比如:写配置,假如你使用了SPIRNG,MVC,ORM这些框架,你还是逃不了配置。虽然你的代码可以复用。这算不上是100%的复用。但是,代码确实被复用了。你不用COPY,你只要IMPORT,NEW。
这很矛盾。页面100%对应DAO。页面不对应DAO。太多的争论!
我想解决这种矛盾一定有更好的方法,完全可以利用我们目前的技术来解决这些矛盾。大家有什么好方法?
以上这些内容是在2个月前(一个月前?忘记了)写的。下面是今天补充的!
-------------------------------------------------------------------------------------------------
后记:目前有些比较好的解决方法,这些应该是大家常用的。
1.把一些通用方法些成独立的类。(之后对其引用或者继承)
2.进行更高成次的封装。(有些直接打包成JAR)
3.进行模型化,类似于充血模型的那种方法。
4.带网友补充!
这些方法都很常用,也很老套,似乎现在没有更好的方法。
1。继承的问题:关系太复杂,但是可以提高速度,复用性强。
2。引用的问题:现在使用IOC,问题不太大,但是如果程序结构不好,问题还是挺多的,而且一个类里到处去引用N个类,结构很混乱,但是有些时候我们不得不这样做。
3。使用AOP:老生常谈,问题就是AOP复杂,项目中使用会带来学习曲线,成本问题。而且维护的人对AOP不一定熟悉,虽然是非侵入式,这种侵入式我认为是非技术上的侵入,但是对人的侵入比较大,不过像事物处理,日志记录等等使用到是能带来良好的代码可读性。选择AOP需要在技术和人员上做出均衡的选择。
4。各种框架的拦截器泛滥问题:这个问题在SPRING与STRUTS2的组合中由为严重。SPRING中有AOP,STRUTS2中有拦截器,导致本身应该属于业务层的逻辑验证跑到了展现层中,导致代码难被复用(强大的封装),测试困难。
再次关于DAO与页面:
在回到DAO与页面,我认为如果Domain只是单纯的GET/SET,但是DAO与页面操作对应应该非常的好,程序结构完全的非OO,用的很爽,开发速度也很快,我就这么干过,一个功能,一个功能的写,类只是个空架子,模块与模块之间没有任何的继承关系,只是引用。小行项目很适合,而且连设计都不需要,本身功能很独立,有的时候连面向接口编程都省了。相比之下,还是要根据项目的大小,实施情况,人员水平来综合考虑。
个位网友的个人经验之谈:
xuzhfa123 写道
各有各的好处:
第一种:DAO对应页面,也可以说一个表对应一个DAO
一般大项目时,DAO对页面,这样有利于分工,各自的开发工作独立开来.但是缺点也少,需求变化,相应的DAO跟着改,其次就是那一堆的配置文件也得做相应的改动.最糟糕的是,后期维护困难,这样项目成本也增加。
第二种:泛型DAO结合目前流行的注解
不管是大项目还是小项目都适合,因为共用一个DAO,需求变化时可以做出快速变动(用了注解,至少我hbm文件不用维护了,维护实体类就行啦),其中对DAO没有影响。在可扩展方面也好,可以继承这个DAO进行扩展。后期维护起来当然也减少工作量,降低项目成本。
相比较一下,第二种除了拥有第一种的优点之外,在其他方面也优于第一种。
分享到:
相关推荐
在Struts2 + Spring + Hibernate(简称S2SH)框架中,数据访问层(DAO层)通常与视图层(如JSP页面)进行解耦设计。这种设计模式有助于提高系统的可维护性和扩展性。但在某些情况下,开发者可能需要在JSP页面直接...
DAO(Data Access Object)模式是软件开发中常用的一种设计模式,主要用于封装对数据库的操作,将数据访问层与业务逻辑层分离,以实现更清晰的代码结构和更好的可维护性。在DAO模式中,我们通常创建一个接口来定义...
`Chapter2_DAO与三层结构.ppt`可能会详细讲解这部分内容。 3. 数据访问层:这一层包含DAO对象,负责与数据库的交互,执行SQL查询、更新、删除等操作。DAO模式在这里起到了关键作用,通过提供统一的接口,使得业务...
总的来说,这个demo展示了如何在Java EE环境中使用DBCP作为数据库连接池,DAO层与Service层的分工合作,以及如何在jsp页面中直接展示从数据库获取的数据。这种架构模式有助于提高代码的可维护性和复用性,同时也优化...
在Web开发中,DAO(Data Access Object)模式是一种常见的设计模式,用于封装对数据库的操作,将业务逻辑与数据访问层分离,提高代码的可维护性和可测试性。本教程将详细介绍如何使用JSP结合DAO模式来构建一个具备...
- **解耦**:DAO模式降低了业务逻辑与数据存储间的依赖,便于更换数据源或优化数据库操作。 - **复用性**:由于模块化和职责划分明确,各部分代码可复用性提高。 综上所述,这个“MVC+DAO简单登录”项目展示了如何...
DAO设计模式在JSP+DAO的应用中起到了关键作用,它实现了数据访问层与表现层的解耦,使得JSP页面更轻量,专注于视图展示,而业务逻辑和数据操作则由DAO处理。这种设计提高了代码的复用性和可测试性,也有利于团队协作...
6. **编写前端页面**:前端页面调用DAO工厂类,通过工厂返回的DAO实例进行数据库操作。 **示例:** 假设我们正在开发一个用户登录功能,可以通过以下步骤来实现: - **定义UserDAO接口**,包含login方法。 - **...
结合Struts与DAO模式的登录系统,能够有效分离关注点,使系统更加健壮、灵活。 #### 三、需求分析 根据题目中的描述,本项目的核心目标是实现一个用户登录功能。具体的业务需求包括: 1. **用户数据存储于数据库...
2. **DAO(Data Access Object)**:DAO作为数据库访问的桥梁,它处理与数据库的所有交互。在描述中提到的"Servlet返回结果集",可能是指一个Servlet调用DAO方法获取数据,然后将查询结果集(ResultSet)传递给控制...
- **DAO**:DAO模式是Java应用中常用的持久化机制,它提供了一种与数据库交互的标准接口。在博客程序中,DAO类会包含与数据库操作相关的代码,如增删改查博客文章或用户信息。DAO层的使用可以隔离数据库操作的复杂性...
在IT领域,JSP(Java Server Pages)与DAO(Data Access Object)模式的结合是常见的Web应用程序开发方式,尤其在构建动态网站时,如留言管理系统。本篇文章将深入探讨这个基于JSP+DAO的留言管理程序,包括其核心...
**MVC模式与DAO设计模式详解** 在软件开发领域,MVC(Model-View-Controller)模式和DAO(Data Access Object)模式是两种常见的设计模式,它们分别在业务逻辑处理和数据访问层起到了关键作用。在" MVC+DAO实现留言...
DAO(Data Access Object)模式是软件设计模式的一种,用于分离业务逻辑层和数据访问层,提供更清晰的架构和更好的可维护性。本教程将详细介绍如何利用JSP实现文件的上传和下载功能,并结合DAO模式进行数据处理。 ...
1. `DallUtil.aspx`:这可能是工具的主界面,一个ASP.NET网页,用户可以通过这个页面与工具进行交互,如输入数据库连接信息,选择要生成的表等。 2. `DallUtil.aspx.cs`:这是ASP.NET网页的后台代码文件,包含了处理...
- **Model(模型)**:主要处理业务逻辑和数据操作,通过DAO与数据库交互,获取或修改数据。 - **View(视图)**:负责展示用户界面,通常由JSP页面实现,显示从Model获取的数据。 - **Controller(控制器)**:接收...
DAO技术在数据库访问中的应用与实现.caj
结合文件名称列表中的“003(进阶三)_使用JSP+DAO完成用户登陆”,我们可以推断这是一个教学案例,演示如何使用JSP处理前端请求,通过DAO与数据库交互进行用户登录验证。在JSP页面上,可能有一个表单用于收集用户的...
本主题聚焦于Java Web开发中的分页技术,主要涉及两个方面:JSP(JavaServer Pages)结合DAO(Data Access Object)模式以及MVC(Model-View-Controller)框架下的DAO实现,两者均与MySQL数据库进行交互,实现数据的...
Action是指与页面相关的逻辑处理,主要负责处理页面的输入和输出,并对业务逻辑进行调用。例如,在Struts框架中,Action类负责处理页面的请求和响应。在Action中,我们可以看到页面逻辑、业务逻辑和数据访问的混合...