6

想象一下,您正在开发一个成熟的产品,并且要求 50% 的产品需要一个新的搜索功能。现在假设您与 SomeDao 建立了不想破坏的接口继承关系......

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

...有没有办法公开方法'findByCriteria(..)'而不在所有其他类似于MoneyDao的地方以更清洁的方式重复它?

请记住,如果可能的话,我想避免将其转换为使用和修改 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);     
}

现在你的类实现MoneyDao不需要改变,但你可以只传递findByCriteriausing MoneyFinder

于 2011-05-10T14:28:25.780 回答
1

这完全取决于您是否想要一个可搜索的类并且是道,换句话说,它是否您的可搜索类也必须是道。如果是这种情况,我会使用通用方法使您的 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 回答