想象一下,您正在开发成熟的产品,并且要求50%的产品需要新的搜索功能。现在假设您与SomeDao建立了一个已建立的接口继承关系,您不想破坏...
public interface MoneyDao
extends SomeDao<MoneyEntity>
{
//Operation common in much of the application
List<MoneyEntity> findByCriteria(MoneyCriteria criteria);
}
...有没有办法公开方法'findByCriteria(..)',而不是在所有其他类似于MoneyDao的地方重复它,以更清洁的方式需要它?
请记住,我想避免使用新的类型,如果可能的话,使用和修改SomeDao。
此致 詹姆斯
答案 0 :(得分: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
的课程无需更改,但您可以使用findByCriteria
传递MoneyFinder
。
答案 1 :(得分:1)
这完全取决于你是否想要一个可搜索的类并且是Dao,换句话说,如果你的可搜索类必须也是Dao。如果是这种情况,我会使用通用的方法来制作你的Dao Searchable。
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) {...}
}