设计一个灵活性高、扩展性好的软件产品不是一件容易的事情。
在面向对象的世界里,解耦才是真正的宗旨所在,只有充分恰当的通过抽象、封装、继承和多态才能达到解耦的宗旨,才有可能做好一款灵活性高、扩展性好的软件产品。
在这个过程中需要学习很多知识。面向对象语言,OOA和OOD,还有面向对象所相关的各种技术,如设计模式、建模语言和框架等,另外,还需要学会面向切片、面向服务、面向接口等思想;在这个过程中,需要用心去积累经验,如粒度大小设计,抽象层次的高低设计,接口的设计等等,有些经验是非常宝贵的,这些如果设计不好,很有可能导致系统臃肿、笨拙。所以做好一款好的软件产品需要很多。
所以在做设计的时候,都会把解耦作为最高宗旨,这就离不开上面所说的所有知识和经验。最近在做一个平台系统,在做设计的时候就需要对解耦做深入的技术调研和做许多技术支撑,所以这也是我在前段时间研究了所有的J2EE规范、中间件概念、一些设计模式和框架。有了这些技术的铺垫,才可以说可能会做出来一个灵活性高、扩展性强的平台软件。
要向达到解耦的目的,分层是必须的。所以这就是有了持久层的概念(大家可以查一下百科【持久层的概念】)。
在持久层中可以分为两种,一个是DAO,另一个是EAO。也就是数据持久层和实体持久层。这两种方式的区别在于传输的对象是不同的,EAO是传递的是实体(多数用在持久化框架中);而DAO传递的是普通的数据(多数用在纯JDBC操作中)。
因为现在做的平台是基于EJB3的,而EJB3的持久化是通过JPA规范实现的,所以在前期设计的时候对持久层采用的是EAO形式的。
这一点从下面的方法就能看出来:
/** * 查找实体 * * @param entityClass * 实体类 * @param pk * 主键 * @return根据指定主键返回实体 * @author CJQ 2013-3-7 10:44 */ public <T> Tget(Class<T> entityClass, Object pk) { Tobj = em.find(entityClass,pk); return obj; }
这次封装的EAO颗粒需要完成所有的持久化的工作,还需要提供公共的,共享的一个颗粒,为所有的业务逻辑服务。这就需要用到泛型和接口:
/** * 操作数据库接口 * * @author CJQ 2013-3-7 10:31 */ public interface CommonEao { /** * 查找实体 * * @param entityClass * 实体类 * @param pk * 主键 * @return根据指定主键返回实体 * @author CJQ 2013-3-7 10:20 */ <T> T get(Class<T>entityClass, Object pk); }
另外,为了应对各种业务应用,在EAO颗粒中提供了等于、模糊查询、分页查询的实现。
最后,EAO颗粒为了支持各种情况,还提供了原生SQL的支持,这一点虽然违背了EAO的概念,但是因为这个颗粒的完备性,所以把就添加了支持原生SQL的实现。
对于EAO封装的颗粒源码,大家可以到CSND下载网站上去下载,地址为:http://download.csdn.net/detail/lfsf802/5217143
封装可以说是非常困难的,因为需要对面向对象思想有很深的造诣,需要有经验和想法。面向对象的思路是和生活远远分不开的,理解面向对象就需要对生活有更加的体悟,所以说编程离不开生活,编程是一种映照生活的一种艺术。