1

我目前正准备开始一个新项目的工作,以学习集成 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 来执行此操作我?还有其他好处吗?

4

0 回答 0