5

DAOパターンを使用するのはこれが初めてです。これまで読んだことから、このパターンを実装すると、呼び出し元のコード (コントローラー) を永続化の実装から分離するのに役立ちます。つまり、特定のデータベースやサードパーティ ライブラリの使用に制限されたくありません。

MongoDB と morphia (例として) を使用して (TDD 方式で) テスト コードを作成し、morphia が提供するBasicDAOクラスを使用します。

私が知る限り、拡張にBasicDAO<T, V>は Morphia オブジェクトと Mongo オブジェクトを受け入れるコンストラクターが必要です。これらは非常に具体的な (サード パーティの) 型であり、DAO クラス自体の外に出てほしくありません。

プラグ可能なアーキテクチャをさらに増やすにはどうすればよいですか? つまり、実際のソースの外部で、特定の構成引数を持つ特定の DAO を使用するようにアプリケーションを構成できるようにするには、何を調べればよいでしょうか?

4

4 に答える 4

9

「プラグ可能な」DAOレイヤーは、通常/常にインターフェースDAOに基づいています。たとえば、非常に一般的な単純なものを考えてみましょう。

public interface GenericDAO <T, K extends Serializable> {  
    List<T> getAll(Class<T> typeClass);   
    T findByKey(Class<T> typeClass, K id);  
    void update(T object);  
    void remove(T object);  
    void insert(T object);  
}

(これはMorphia のジェネリック DAOにあるものです)

次に、さまざまなフィールド (コンストラクターのパラメーター、セッター、ゲッターなどに反映される) を見つけることができる、さまざまないくつかの汎用 DAO 実装を開発できます。JDBC ベースのものを想定しましょう:

public class GenericDAOJDBCImpl<T, K extends Serializable> implements GenericDAO<T, K extends Serializable> {
    private String db_url;

    private Connection;
    private PreparedStatement insert;
    // etc.
}

ジェネリック DAO が (具体的なデータストア用に) 実装されると、具体的な DAO を取得するのは非常に簡単になります。

public interface PersonDAO extends GenericDAO<Person, Long> {

}

public class PersonDAOJDBCImpl extends GenericDAOJDBCImpl<Person, Long> implements PersonDAO {

}

(ところで、Morphia の BasicDAOにあるのは、MongoDB 用の汎用 DAO の実装です)。

プラグ可能なアーキテクチャの 2 番目のことは、具体的な DAO 実装の選択です。Apress: Pro Spring 2.5の第 2 章("Putting Spring into "Hello World") を読んで、ファクトリと依存性注入について徐々に学習することをお勧めします。

于 2011-11-08T11:58:57.877 に答える
1

Spring は構成を使用して DI を行い、広く使用されています。

于 2011-11-08T11:51:53.820 に答える
1

こんにちは、私は Java の専門家ではありません。しかし、解決策を提供しようとしています。

接続関連のすべてが発生するスーパークラスと、それを拡張して使用できる他の基本クラスを持つことができます。

後で特定のサード パーティ ドライバの DB にスイッチを入れると、スーパークラスを書き換えることができます。

繰り返しますが、私は専門家ではありません。ここで勉強しようとしているだけです。:)

于 2011-11-08T11:56:33.417 に答える
0

いくつかの標準的な DI フレームワークは、Spring と Guice です。これらのフレームワークはどちらも TDD を促進します。

于 2011-11-08T11:40:31.763 に答える