6

成熟した製品に取り組んでいて、製品の 50% に必要な新しい検索機能が要求されたとします。壊したくない SomeDao との確立されたインターフェイス継承関係があると仮定します...

public interface MoneyDao 
    extends SomeDao<MoneyEntity>
{
    //Operation common in much of the application
    List<MoneyEntity> findByCriteria(MoneyCriteria criteria);     
}

...メソッド 'findByCriteria(..)' を公開する方法はありますか?

可能な限り、使用されている新しい型にキャストして SomeDao を変更することは避けたいと心に留めておいてください。

よろしく、ジェームズ

4

2 に答える 2

5

findByCriteriaを独自のインターフェイスに分割して で拡張できますMoneyDaoか? このようなもの:

public interface MoneyDao 
    extends SomeDao<MoneyEntity>, MoneyFinder
{
}

public interface MoneyFinder
{
    //Operation common in much of the application
    List<MoneyEntity> findByCriteria(MoneyCriteria criteria);     
}

実装するクラスを変更する必要はありませんが、 usingMoneyDaoだけを渡すことができます。findByCriteriaMoneyFinder

于 2011-05-10T14:28:25.780 に答える
1

そのすべては、検索可能で Dao であるクラスが必要かどうか、つまり、検索可能なクラスも Dao でなければならないかどうかに依存します。この場合、一般的なアプローチを使用して Dao を検索可能にします。

interface SearchableDao<Entity, Criteria> extends SomeDao<Entity> 
{
    List<Entity> findByCriteria(Criteria criteria);
}

これで、クラスは単純な Dao または SearchableDao にすることができます。SearchableDao も単純な Dao です。

class MoneyDao implements SearchableDao<MoneyEntity, MoneyCriteria> 
{
    List<MoneyEntity> findByCriteria(MoneyCriteria criteria) {...} 
}
于 2011-05-10T14:59:49.897 に答える