Design patterns 存储库设计模式
我见过许多存储库模式实现。特别是两种类型Design patterns 存储库设计模式,design-patterns,repository-pattern,Design Patterns,Repository Pattern,我见过许多存储库模式实现。特别是两种类型 它们公开了通用存储库,该存储库是可查询的,并且需要服务类中的lamba表达式从数据库中获取数据 根据业务需求编写从数据库获取数据的方法,并封装检索数据的逻辑(甚至lambda) 哪种方法更好?我真的更喜欢第二种方法 就连我在.NETWorld上也看到过顶级博主的文章,对我来说,查询功能在存储库中是邪恶的 原因: 存储库类似于对象的集合,但存储在其实现定义的任何位置 存储库抽象数据映射到对象的方式。数据存储可以是任何形式,但业务依赖于存储库来检索、添加、更
哪种方法更好?我真的更喜欢第二种方法 就连我在.NETWorld上也看到过顶级博主的文章,对我来说,查询功能在存储库中是邪恶的 原因:
虽然我发现queryable与repository不兼容,但对我来说,设计和实现一些接受lambda表达式或任何委托的repository方法以提供某种过滤器或行为是可以的。这不是延迟执行,而是委托。我更喜欢第一个 可查询版本更好,因为它需要更少的代码,并且更灵活 你不必事先知道你在找什么
// instead of repository.FindByMinimumAge(18)
customerList = repository.Find<Customer>(c => c.Age >= 18)
这可以通过NHibernate、Linq2Sql或“使用arraylist模拟”来实现。您是否将lambda与泛型混淆了。i、 e.IRepository是您的接口和产品存储库:IRepository是您的实现。但是,@k3b,那么,存储库的意义何在?只需从另一个源返回一个可查询文件,然后继续!:我完全同意你。。。很好…我也喜欢第二个。设计这样的存储库需要更多的痛苦,但它提供了正确的抽象。我只是想知道第二种方法是否会有瓶颈……我怀疑第二种方法的概念会有瓶颈。这是一个可预测的流程。很高兴知道它对你有用!
public interface IRepository<T> where T : class
{
IEnumerable<T> Find(Expression<Func<T, bool>> where);
...
}