Posted on 2007-02-27 17:48 
冰浪 阅读(2299) 
评论(3)  编辑  收藏  所属分类: 
WEB开发 
			
			
		 
		
		
				
						
								     DAO
						是
						Date Access Object
						的缩写,就是数据访问对象。
						DAO
						模式就是将对数据库的操作都封装成一个类,在需要进行数据存取时就直接调用
						Dao
						类实例对象来完成的一种工作方式,这也是面向对象编程的一种体现。
						
								
								
								
						
				
		
		
				
						在
						CSUOA
						中,我将数据库里每一个表都对应一个实体
						Entity
						,而每一个
						Entity
						都对应着一个
						Dao
						的实例类,用于进行相应的操作。
						
								
								
						
				
		
		
				
						如
						CSUOA
						数据库里有
						oauser
						,
						mail
						,
						message
						等表,分别代表用户表,邮件表,短信息表。那么我就对应着有
						OauserDao.class
						,
						MailDao.class
						,
						MessageDao.class
						等
						Dao
						实例类。而我们知道,数据库操作中最基本的就是增删改,这也是共性,所以我将增删改操作抽象出来,建立一个
						Dao
						抽象类
						BaseDao.class
						,作为
						Dao
						实例类的父类,其类方法可为增删改的抽象方法或实例方法,具体要根据数据持久操作的底层实现来确定。当然,进一步来说,获取对象也是基本的操作,在这里省略了。
						
								
								
						
				
		
		
				
						那么,到这里就完成了吗?没有!按照面向接口编程的原则,我再建立一个
						Dao
						接口:
						Dao.class
						作为抽象类
						BaseDao.class
						的父类。而在
						Dao.class
						里,我们只声明了增删改的无任何实现的抽象方法。
						
								
								
						
				
		
		
				
						接口不能实例化,定义了接口又怎么用呢?对,接口是不能实例化,但我们可以声明一个接口类型的引用。也就是创建一个
						Dao
						实例对象,但声明其类型为
						Dao
						接口类型。例如:
						Dao dao = new OauserDao();
						这样有何意义呢?是因为对松耦合的要求,这点我们在下篇再详细说明。
						
								
								
						
				
		
		
				
						除了要进行基本的增删改操作外,有些
						Entity
						还要进行其它一些操作,如查询。我首先想到的是,在
						OauserDao.class
						里扩展功能,加入查询方法,以致于可以进行查询操作。即在
						Dao dao = new OauserDao();
						后用
						dao.query(“queryStr”);
						进行查询操作,但此时,编译器报错了,说“没有为
						Dao
						定义
						query()
						方法”。想想也对,将
						dao
						声明为
						Dao
						类型,编译器就以
						Dao
						类型所拥有的方法进行编译,但此时编译器无法在
						Dao
						接口类里找到此方法,所以报错了。
						
								
								
						
				
		
		
				
						几经思考后,想到可以这么做:新建立一个
						Query.class
						的接口类,并声明查询方法,然后在
						Dao
						实例类如
						OauserDao.class
						里实现
						Query
						接口。我们知道,一个类可以实现多个接口,这就是接口的优势。在要进行查询操作时,我们将之前
						dao
						实例对象声明为
						Query
						类型,此时就通过了编译并实现了我所要的结果。
						
								
								
						
				
		
		
				
						
								 
						
				
		
		
				
						我以前写程序,根本就不会去用接口,也不明白接口有什么用,也不会去用抽象类,动手就是实例类,最多也就是用到继承,以为这就是面向对象了。从这可以看我的面向对象基础不太好,我觉得很大程度是因为我们大学里所用教材的原因,教材里所写的就只是一些语法。而自己又是大三下学期才决定转入
						Java
						方向的,所以深深知道自己要学习的东西太多太多。在大四时我就决定好好补上这一课,而当我在网上看到孙卫琴的《
						Java
						面向对象编程》这本书并预读了其中一章内容时,我马上做出了买书的决定!因为这本书刚出版的原因,我没有在惠州买到,所以就托我哥在顺德买了下来,拿到手后如获至宝。现在,我已经基本上看完了这本书,明白了很多东西,觉得自己的面向对象思想已经达到了一个质的飞跃。在此我要特别感谢孙卫琴老师,给我们写了一本这么好的书。也是因为这些,我才可以写下这篇开发日记,算是有点东西的东西。