一个软件项目,少不了数据的持久化,那么,怎么设计才能让系统代码具有更好的可维护性,让程序员更高效地进行核心业务的开发呢?下面是笔者在一些项目中使用过的持久层设计方案。
我们现在假设要写一个在线书店项目,用户要登录系统,并对图书进行管理,我们可以看到下面的几种持久层设计方案在这个项目中的优劣。
(如果图片看不清,请点右键,查看图片,原图是高清晰的哈)
方案一:
设计图中有些方法笔者进行了简化,本文的重点在于方案比较。上面的这种设计方案应该是非普通的一种做法,它有如下的一些优点:
1、业务层只负责实现业务,与持久层相关的所有东西(sql、hql等),全部放到dao实现类中去做。
2、方便数据库性能优化,所有数据库职责以按实体对象为粒度进行分配,所有的sql指令均由dao这里发出。
3、结构清晰,dao就是ddd中的仓储对象。
缺点:
不利于系统后期维护。后期一但要加功能,工作量比较大,首先你得加业务层的方法,很有可能也要为实体dao添加方法,这样一来,一处业务修改,就会动到dao接口及期实现类,加上业务层接口、实现类,修改达4处,对于新手来说,很容易迷糊。
方案二:
方
案二采用通用dao,实现所有的CRUD操作,在业务实现类中注入通用dao完成业务对持久层的操作,该方案的优点是简单,添加业务实现类或修改业务实现
类时,非常的方便,一个地方搞定;当然,很多好的东西都是双刃剑,该方案必然会在业务实现代码中出现sql、hql等持久层与数据库相关的逻辑,很多人认
为这种做法不OO,职责划分不分明。但是这种方案在项目中也是很有用的,谁说sql就一定是数据库的东西,多年前我可是擅长用存储过程来实现业务
哈,sql本身就和业务密不可分哦。
方案三:
方 案三也采用的是通用Dao实现。该方案根据OOD的开闭原则,将持久层中的增、删、改三种不变化的操作封装到CRU_DAO中,而将查询封装到
IFinder中,实现类中封装的也是通用持久化方法。但这种设计中,要求业务接口必须继承通用接口,业务实现类也要继承通用实现dao实现以获得持久化
能力。
该方案的优点是让程序员感觉只有业务层的存在,似乎更加容易理解,但该框架让业务实现类通过继承获得持久化功能,违背了“组合聚合优于继承”的设计原则。
我用这种方案做过一些项目,感觉不是太方便,但中国移动的大部分系统都是用这种持久层设计方案实现的,用得倒也挺好的。
方案四:
这种方案是我在HP中国的一些项目中看到的,自己也曾在多个项目中实践,应该是一种非常不错的设计方案,虽然在图上看起来有些杂乱,但该方案确实能大幅提升开发效率。
该
方案中,有通用的dao接口,所有crud与通用分页的方法都加入通用dao接口中,该接口有一个具体的实现。在业务层与持久层的设计上,我们还是采用方
案1的做法,相关实体都有自己的持久化接口,但实体的持久化接口都从通用dao接口继承,持久化实现类在实现自有接口的同时,继承通用dao实现类,这
样,每个实体持久化类就有了全部的通用化持久层方法,如果你的实体持久化需要什么特殊的持久化方法,只需添加这些特殊的持久化方法(一般是查询方法)即
可,非常的方便。
有不同设计方案的同学,可以与我沟通。
本文首发http://www.fudu365.com【英语听力复读网】,转载请保留。
分享到:
相关推荐
针对Scott Ambler提出的健壮持久层设计方案存在的问题,提出了一种基于软件体系结构的对象持久层设计方案。将体系结构作为对象持久层的整体视图,反映了对象持久层的整体功能和结构,并利用层模式实现了对象持久层的...
通过上述组件和策略,EJB的持久层设计能够满足复杂企业应用的需求,提供健壮、可扩展的解决方案。在JBuilder 2005和JDK 1.4.2环境下,开发者可以创建并测试EJB组件,包括持久层的设计,以实现高效的数据管理。
**鲁棒的数据库持久层设计:关键知识点解析** 在IT领域,尤其是软件开发与数据库管理中,鲁棒的数据库持久层设计是确保应用程序稳定、高效运行的重要环节。本解析将围绕给定文件“鲁棒的数据库持久层设计.pdf”的...
为了解决这些问题,作者分析比较了现有的持久层解决方案,如Hibernate、iBatis等ORM框架,这些框架能够自动处理对象与关系数据库之间的转换,提高了开发效率。 在此基础上,论文提出了一种创新的解决方案,即利用...
仿J2EE持久层时,ASP开发者可以借鉴工厂模式、单例模式等设计模式,优化代码结构,提高可维护性。 8. **异常处理**: ASP中的错误处理与J2EE不同,需要使用On Error语句进行捕获和处理。为了更接近J2EE的异常处理...
Hibernate是一种Java语言下的对象关系映射解决方案。 它是使用GNU宽通用公共许可证发行的自由...它的设计目标是将软件开发人员从大量相同的数据持久层相关编程工作中解放出来。无论是从设计草案还是从一个遗留数据库开
本项目为“基于Java的Hibernate和JPA持久层框架设计源码”,包含92个文件,其中65个Java源文件、21个XML配置文件、1个Gitignore文件、1个Spring Beans配置文件、1个SQL脚本文件、1个属性文件和1个JSP页面。...
在基于J2EE的项目开发过程中,数据持久层的设计一直是重点和难点。在对比几种解决方案的基础上,介绍了实现数据持久层的一种新技术JDO,对它的...实践证明,与其他技术相比,该技术大大提高了数据持久层设计的效率。
1、Crocodile持久层框架是基于.net开发的,可复用的一个框架。 2、系统需要vs.net 2005的支持、已经安装IIS服务器 3、系统运用分层原理和组件原理,将所有的MIS管理系统划分为用户界面层,业务规则层,数据访问层和...
在嵌入式系统中,文件系统的持久层设计至关重要,因为它直接影响到数据的可靠性和效率。针对大容量、大擦除块的SPI接口Flash设备,如SST256401和STM25P64,其特有的硬件特性为文件系统设计带来了一定挑战。 SST...
3.1设计方案概述 设计中将采用Maven作为项目构建工具,利用IDE如IntelliJ IDEA或Eclipse进行开发。数据持久层将基于Hibernate,利用注解或XML文件进行对象-关系映射。Spring将用于管理依赖和事务,提供数据访问对象...
4. **缓存策略**:为了提高性能,持久层设计中常常会用到缓存技术,如二级缓存,减少对数据库的直接访问。 5. **事务管理**:在多用户并发环境下,事务的正确性和一致性至关重要。持久层框架通常会提供事务管理机制...
本资料包"基于Java的持久层框架,零配置,零SQL操作持久层.zip"着重介绍了如何使用一种无需配置、简化SQL操作的持久层解决方案。 1. **Java持久层框架的重要性** - **提高开发效率**:通过封装数据库操作,开发者...
XML在数据持久层设计中扮演了关键角色。XML作为一种结构化数据格式,能跨平台、跨语言地表示和交换数据,便于数据的序列化和反序列化。通过XML,可以实现数据对象的独立于数据库的封装,增强了系统的可扩展性。此外...
这个特性在很多方面都有广泛的应用,尤其是在数据持久层(Persistence Layer)的轻量级对象关系映射(Object-Relational Mapping,简称ORM)框架中。ORM框架的主要目的是为了简化数据库操作,并将数据库中的数据映射...
在Spring框架中,数据源的管理是持久层设计的重要组成部分。Spring提供了多种数据源的支持,包括`DriverManagerDataSource`,但通常这种数据源不推荐用于生产环境,因为它缺乏连接池功能,可能导致性能问题。为了...
MyBatis则是一种轻量级的持久层框架,它的设计思想是将SQL语句与Java代码分离,以XML或注解形式配置SQL,从而实现了更灵活的SQL操作。MyBatis特别适合那些对SQL有特殊需求或者需要高度定制SQL的项目,它保持了SQL的...
项目名称:轻量级Java持久层框架MiniDAO...MiniDAO致力于简化数据访问层代码,通过FreeMarker模板提供灵活的SQL管理方式,同时继承了Spring JDBC的易用性和高效性,为Java开发者提供了一个简洁、高效的持久层解决方案。