我目前正准备开始一个新项目的工作,以学习集成 JSF2、Hibernate 和 DI(以 Guice 的形式)的最佳实践。
我的目标是针对表示层的 JSF2 (myfaces) 和针对数据库层 (ORM) 的 Hibernate 4.1。
通常在我使用 ORM 之前,我会满足于在项目中创建 Backbean、BDI、BD、BO、DTO 和 DAO 文件夹结构的以下模式:
- 应用程序 backbeans 方法进入 Backbean 文件夹
- 接口进入 BDI 文件夹
- 接口的实现进入 BD 文件夹
- BO中的类用于调用上层DAO类
- DAO 类是完成所有 JDBC 工作的地方。
休眠问题:
为了集成 Hibernate,我是否需要摆脱 DAO 并直接从 BO 调用 HibernateDAO?或者使用 DAO 而不是调用 JDBC 使用 Hibernate 与 SQL 交互?
DI(Guice)问题:
我以前一直在使用诸如“DeligateFactory”和“ServiceFactory”之类的类作为在我的代码中促进失去耦合的一种方式,例如:
//interface
public Interface UserBDI {
public User userAuth();
}
//implementation of the interface
public class UserBD implements UserBDI {
public UserBD() {};
//do something here
public User userAuth() {...};
}
//Deligate Factory
public class DeligateFactory{
public DeligateFactory(){}
public static UserBDI CreateUserBD() {
UserBDI bdObj = new UserBD();
return bdObj;
}
}
//some backbean
public class homePage {
public homePage(){}
public authUSer(){
userBD bdOBJ = DeligateFactory.CreateUserBD();
User u = new User();
u.setID("test");
u.setPass("test");
//validate
u = bdObj.userAuth(u);
}
}
我理解 DI 的概念是消除代码中使用的接口实现的紧密耦合,所以如果我将 DI“集成”到我的项目中,我是否只是摆脱了所有 DeligateFactory/ServiceFactory 方法,而是使用 DI 来执行此操作我?还有其他好处吗?