我希望我的代码与实现无关。在这种特殊情况下,我想抽象数据存储
我创建了IDatasource接口,可以稍后由SqlStorage,MongoStorage等实现。我注意到我必须在接口中定义可能需要的每个方法。例如,我可以getUser(String name)
,但如果我想要getAllUsers()
,我无法使用getUser(String name)
实现它,因为我事先并不知道所有用户都是名。所以我必须将getAllUsers()
添加到IDatasource
如果我为每种新方法执行此操作(例如只获得符合某些条件的某些用户),则很快就会变得混乱。
我想到总是得到所有用户并在代码中进行过滤,但这没有多大意义
有没有更简单的解决方案,或者我留下了巨大的界面?
答案 0 :(得分:1)
您所描述的是DAO模式的问题。界面往往膨胀,因为它的限制没有明确规定。
更好的选择是使用Repository模式。这里的独创性是使用规范来选择正确的结果集。使用此模式,您不太可能需要经常添加新方法。
public interface AccountRepository {
void addAccount(Account account);
void removeAccount(Account account);
void updateAccount(Account account); // Think it as replace for set
List query(AccountSpecification specification);
}
有关详细信息,建议您阅读本文:https://thinkinginobjects.com/2012/08/26/dont-use-dao-use-repository/