我在设计dao层时遇到的问题

    
gaofangjian
05-09-09 4 539

我们准备开发一套业务查询系统(主要功能就是查询)
客户输入查询条件---通过mapping解析找到----action--调用ejb---调用dao
比如我在客户端输入某个客户的客户代码--提交给一个****.do的文件处理
***.do只是一种标示,实际上是一个类的某个方法(这个类是我们公司自己开发的delegate类)然后delegate类调用相应的ejb方法,ejb几乎不做什么(因为所有需求都是查询),ejb在调用dao (直接编写的类访问数据库)
疑问
1。各位老师这个框架用来做这套查询系统是不是太复杂了?有没有好的建议来修改呢?
2。dao 层的实现我的想法是
因为需要很多同种类型但是具体功能有差异的dao所以用工厂模式比较适合,建立DaoFactory
public class DaoFactory {
private static DaoFactory singleton=null;
public DaoFactory getInstance()
{
if(singleton==null)singleton=new DaoFactory();
return singleton;
}
---这个用到单态模式,但是我一直不是很理解为什么要用单态呢,java中不时有垃圾回收器么,当访问的人数多时候生成多个对象实例
当访问人数少的时候回收不就可以了么?如果用单态,所有人访问的人只能共同拥有一个实例,会不会有些客户分配不到资源呢?
public Dao getDao(String type)
{
switch(type)
case 'A' return (Dao)new a();
break;
case 'B' return (Dao)new b();
....
default: reuturn null;
}
}
interface Dao
{
public connection getConnection();
}/*Dao 接口*/
public ADao implements Dao
{
DataSource ds=null;
Connection conn=null;
void setDs( String dataSourceName)
{
InitialContext ctx = new InitialContext();
DataSource ds =(DataSource)ctx.lookup(dataSourceName);
this.ds=ds;
}
public Connection getConnection()
{
return ds.getconnection();
}
}
所有实现Dao接口的类都要有这样的方法,我现在很疑惑应该把这些代码
写在Dao实现中,还是写在Dao工厂里面呢(返回Dao之前进行这样的操作)
就是这样 ,工厂里
switch(type)
case "A":
{
InitialContext ctx = new InitialContext();
DataSource ds =(DataSource)ctx.lookup(dataSourceName);
ADao dao =new ADao();
dao.setDs(ds);
return (Dao)dao;
}
再ADao实现类中
setDs(DataSource ds)
{
this.ds=ds;
}
Connection getConnection()
{
return ds.getConnection();
}


请各位执教一下。

mythmoon
2005-09-12 14:32

建h你看下jdon的jdbctemp和肖炯的ADOO,你可以去找下,Y面的帖子Y面有.
public Dao getDao(String type)
方法,如果如果要例的很多的苈,也不`活,Jdonframework 用IOC解Q的不是很好?可以去看看bang老P於@方面的介B阿

banq
2005-09-13 12:30

是的,尽量不要使用单态,使用ioc容器比较好,如果你觉得复杂,可以不必使用DAO工厂。

如果一定要使用,可以参考Pestore中的CatalogDao工厂做法,它是使用类反射获得DAO实例的。

DAO中的Datasource初始化可以选择Factory,也可以写在Dao构造方法中,这是取决于你使用工厂模式目的,如果你有很多DAO,可能需要更换,那么使用Factory,这样方便你以后更换。

如果不需要,就简单一些。



gaofangjian
2005-09-15 10:44

谢谢老师的指导,非常感谢。
我会努力的,banq老师你的培训只是在上海么?其他给地有没有,我出差不方便,当时我非常想听您的课程,我是天津的,有没有别的办法,能得到您的指导呢?

banq
2005-09-16 09:04

我提供上门企业咨询培训,可点我信箱和我联系。谢谢