我在设计dao层时遇到的问题
我们准备开发一套业务查询系统(主要功能就是查询)
客户输入查询条件---通过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();
}
请各位执教一下。