私は現在、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 を使用してこれを行うのですか?自分?他にメリットはありますか?