2

インターフェイスSomethingDaoと実装クラス がありSomethingDaoImplます。インターフェイスは 11 のメソッドのみで構成されていますが、各メソッドには 1 つ以上の複雑な SQL クエリが必要です。

実装クラスをいくつかの小さなクラスに分割しました。より適切な名前がないため、それらHelper1を , Helper2, Helper3, ...と呼びましょう。HelperNにはそれぞれのSomethingDaoImplインスタンスがあり、メソッド呼び出しをそれぞれにルーティングします。

public class SomethingDaoImpl implements SomethingDao {
    private Helper1 helper1;
    private Helper2 helper2;
    private Helper3 helper3;
    // ...
    private Helper8 helper8;

    public List<X> getX(...) {
        return helper1.getX();
    }

    public List<Y> getY(...) {
        return helper2.getY();
    }


    public List<X> getDetailedX(...) {
        List<X> ds = getX(...); 

        helper6.addTo(ds);
        helper7.addTo(ds);
        helper8.addTo(ds);

        return ds;
    }
}

この技に名前はありますか?複雑なDAOには、すべての作業を行う「働きバチ」がいくつかあり、それらを管理するだけですか?

Helper1、Helper2、Helper3 が DAO オブジェクトである、単なる DAO マネージャー パターンですか? 適切な命名規則に興味があるので、この場合は名前を に変更SomethingDaoImplSomethingDaoManager、 にHelperなりHelperDaoます。

その代わりに「サービス」という名前が使用されているのも見SomethingDaoましSomethingServiceDAO

ありがとう...このシナリオに関連する命名規則とデザインパターンを探しているだけだと思います。実装をできるだけ明確にしたいと考えています。使用しているパターンを示唆する名前を付けると非常に役立ちます。

4

2 に答える 2

1

DAO クラスに 11 個のメソッドしかない場合、それらを実装するために非常に多くのヘルパー クラスが必要になるのは非常に奇妙です。

問題は、なぜ SQL クエリがこれほど複雑なのかということです。

DB/データ ソース内のエンティティ/テーブルごとに個別の DAO インターフェイス/クラスを必ず作成してください。これにより、DAO クラスを単純化し、密結合を減らすことができます。

アップデート

SomethingDaoあなたがコメントに書いたように、あなたを複雑なロジックのファサードインターフェイスと見なす方が正しいと思います。(この記事はそれについて非常に明確です)。

したがって、エンティティごとに異なる DAO を作成し、このクラスを で使用してSomethingDaoImpl、ファサード インターフェイスを実装できます。

ある種の命名規則に従いたい場合は、クラスの名前を と で単純に変更できSomethingFacadeますSomethingFacadeImpl

于 2013-04-18T13:44:02.057 に答える