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

05-09-09 gaofangjian
我们准备开发一套业务查询系统(主要功能就是查询)

客户输入查询条件---通过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
我提供上门企业咨询培训,可点我信箱和我联系。谢谢

猜你喜欢