请教DAO模式的问题?
我想在以后项目中使用hibernate;因此想把以前的东西修改,请高手帮忙!
模块采用工厂/接口的方式;和jive论坛采用的差不多
public abstract class BookFactory{
private BookFactory();
public static BookFactory createInstance();
public abstract Book createBook(String bookname String descripe); //创建图书,返回图书的接口
public abstract void deleteDomain(String bookname); //删除图书
public abstract Book getBook(String bookname)
public abstract String [] getAllBooks(); //得到所有的书
//其他业务逻辑
}
interface Book{
setName(String bookname); //修改书名,写入数据库
setDescripe(String descrip);
getName();
getDescrpe();
//其他业务逻辑
}
Customer,Order同以上
实现类略!
我用DBBookFactory去继承这个抽象类;去实现抽象方法;比如创建一个或得到一个book就返回Book接口!通过这个Book接口来进行book的修改等操作!
现在我想使用DAO模式;以后改为hibernate;但看了DAO模式还是不太清楚!
看了个范例把我的框架修改如下(参考 sun j2ee core pattern)
采用抽象工厂,利于以后扩展
public abstract class DAOFactory {
// List of DAO types supported by the factory
public static final int HIBERNATE = 1; 采用hibernate
public static final int SELFDAO = 2; 采用自定义dao
public abstract BookDAO getBookDAO();
public abstract CustomerDAO getCustomerDAO();
public abstract OrderDAO getOrderDAO();
public static DAOFactory getDAOFactory(
int whichFactory) {
switch (whichFactory) {
case HIBERNATE :
return new HibernateDAOFactory();
case SELFDAO :
return new SelfDAOFactory();
...
default :
return null;
}
}
}
继承类
public class SelfDAOFactory extends DAOFactory {
public CustomerDAO getCustomerDAO() {
return new SelfCustomerDAO();
}
public BookDAO getBookDAO() {
return new SelfBookDAO();
}
public OrderDAO getOrderDAO() {
return new SelfOrderDAO();
}
...
}
public interface CustomerDAO {
public int insertCustomer(...);
public boolean deleteCustomer(...);
public Customer findCustomer(...);
public boolean updateCustomer(...);
public RowSet selectCustomersRS(...);
public Collection selectCustomersVO(...);
...
}
//CustomerDAO的实现类略;
//值对象
public class Customer implements java.io.Serializable {
// member variables
int CustomerNumber;
String name;
String streetAddress;
String city;
...
// getter and setter methods...
...
以上是我照葫芦画瓢改的;但我想尽量不要动的太多!另外采用这种模式我的业务逻辑代码放到那里好!好象dao模式主要进行crud操作;对象Dao接口中不应该被放入更多的业务逻辑!那么其他业务逻辑放到那里好呢?是否还有更好的方法或更好的框架!小弟初学,请各位高手帮忙!谢谢!