2017-12-14 17 views
0

私はDAOのリポジトリについてこの記事を読んできましたが、私はDAOの実装をいくつか見てきましたが、なぜこれらのパターンの使用を抽象化したのか不思議です。たとえば、記事では、著者は汎用リポジトリの代わりにAccountRepositoryを使用します。なぜ抽象化を使用しないのはなぜですか? (リポジトリ/ DAOの実装)

public class DatabaseRepository<T> { 

    public boolean addItem(T item); 
    public int removeItem(int id); 
    public int updateItem(int id, T item); 
    public List<T> query(Specification<T> specification); 

} 

この種の実装は悪いですか?私は実際のソフトウェアエンジニアリング規格に関する十分な経験がありませんので、私はある点や瑕疵がないかもしれないと確信しています。

+0

これは誰でも興味があれば記事です:https://thinkinginobjects.com/2012/08/26/dont-use-dao-use-repository/ – Wanderer

答えて

0

DatabaseRepositoryを使用している場合は、すべてが汎用でなければならないため、最大の理由があります。 AccountRepositoryを持っているときは、リポジトリ内のメソッドのみをAccounts固有のものにすることができます。

私はあなたが本質的に何かを返すQueryというメソッドを持っているからです。個人的に、私はチームにこれをしないように要求し、代わりにリポジトリ自体の中にクエリロジックをカプセル化します(もちろん、DatabaseRepositoryが抽象クラスの場合はこれが問題ありません)。これの主な理由は再利用性です。通常は、特定のクエリが複数のコードで使用される可能性があります。

+0

しかし、リポジトリメソッドも使用する他のいくつかのクラス? Repository _then_ declare specific methodsを実装するのは意味がありませんか? – Wanderer

+0

はい、正確です!たぶん私は明確ではなかったが、AccountRepositoryはDatabaseRepositoryから継承するべきである。だからAccountRepository:DatabaseRepository 。 次に、すべてのリポジトリで共有される汎用メソッドと、その特定のリポジトリ内の特定のメソッドがあります。 – MindingData

関連する問題