web-dev-qa-db-ja.com

DAOファクトリーパターンとは何ですか?

ファクトリおよび抽象ファクトリメソッドを知っていますが、JavaでDAOファクトリパターンを作成したいと思います。

  1. その重要性を知りたい。
  2. その使用法

このリンク を確認しましたが、理解するのは困難です。

誰かが例の助けを借りてそれを説明できますか?

Edit:私が理解したDAOパターンの例を次に示します。

public interface UserDAO {
    public void insert(User user);
    public void update(User user);
    public void delete(int userId);
}

実装:

public class UserDAOImpl implements UserDAO {
    @Override
    public void delete(int userId) {
        // delete user from user table
    }

    @Override
    public User[] findAll() {
        // get a list of all users from user table
        return null;
    }

    @Override
    public User findByKey(int userId) {
        // get a user information if we supply unique userid
        return null;
    }

    @Override
    public void insert(User user) {
        // insert user into user table
    }

    @Override
    public void update(User user) {
        // update user information in user table
    }
}

工場:

public class UserDAOFactory {
    public static UserDAO getUserDAO(String type) { 
        if (type.equalsIgnoreCase("jdbc")) {
            return new UserDAOImpl();
        } else {
            return new UserDAOImpl();
        }
    }
}

クライアント側のコード:

User user=new User();
user.setName("Jinoy P George");
user.setDesignation("Programmer");
user.setAge(35);
//get a reference to UserDAO object
UserDAO userDAO=UserDAOFactory.getUserDAO("jdbc");
//call insert method by passing user object
userDAO.insert(user);

このdaoパターンは正しいですか?

どこで接続を開いて閉じますか?

36
coder25

おそらくあなたが理解していないのは、コードの仕組みです?大丈夫そうです。

参考までに:

  • UserDAOImplとして定義されているものは、必要なデータベースアクセスごとにUserDAOMySQLImplとして名前を付け、別の新しい名前をUserDAOMSSQLImplとして付けることを考慮すると、よりよく理解できます。

  • これらのそれぞれで、接続を処理し、インターフェイス(UserDAO)で宣言する必要があり、強制する必要のない特定のデータベースサーバー構成のプライベート関数などを追加する必要がありますが、少なくとも、インターフェース、次にファクトリー(UserDAOFactory)条件では、次のようなものがあります。

`

public class UserDAOFactory{

    public static UserDAO getUserDAO(String type){ 
        if (type.equalsIgnoreCase("mysql")){
            return new UserDAOMySQLImpl();
        }else{
            return new UserDAOMSSQLImpl();
        }
    }
}

少し明確ですか?

次に、次のようなハードコードされた行の代わりにクライアント側で:

UserDAO userDAO=UserDAOFactory.getUserDAO("jdbc");

プロパティファイルを使用して、DAOを動的に切り替えることができ、単純に実行できるプロパティファイルからその文字列を取得できます。

UserDAO userDAO=UserDAOFactory.getUserDAO(myStringFromPropertiesFile);

myStringFromPropertiesFileには、プロパティファイルの定義に従って「mysql」または「mssql」が含まれます。

お役に立てれば!

DAOは「データアクセスオブジェクト」の略です。特定のオブジェクトのリレーショナルデータベースですべてのCRUD操作を処理するインターフェイスベースのクラスです。ジェネリックを使用する例を次に示します。

package persistence;

public interface GenericDao<K extends Serializable, T> 
{
    public T find(K id);
    public List<T> find();
    public K save(T value);
    public void update(T value);
    public void delete(T value);
}

ファクトリーを「仮想コンストラクター」と考えてください。その作成メソッドはインターフェース型を返しますが、必要に応じて任意の数の異なる実装を作成するように要求できます。

24
duffymo