存储库设计模式

Abh*_*aik 7 design-patterns repository-pattern

我见过很多存储库模式实现.具体有2种

  1. 它们公开了可查询的通用存储库,并期望服务类的lamba表达式从数据库中获取数据.

  2. 编写方法以根据业务需求从数据库中获取数据,并封装检索数据的逻辑(甚至是lambda).

哪一个是更好的方法?

Mat*_*zer 13

我真的更喜欢第二个.

即使我看过.NET世界顶级博主的文章,对我来说,可查询对象在存储库中也是邪恶的.

原因:

  1. 存储库就像一个对象集合,但存储在其实现定义的任何位置.

  2. 存储库抽象数据映射到对象的方式.数据存储可以是任何东西,但业务依赖于存储库以便检索,添加,更新或删除域对象.

  3. 对底层存储的任何读或写访问都必须由存储库本身 - 或任何其他底层 - 进行管理.

可查询会破坏大部分这些点和/或原因.

例如,为什么你要设计一个GetProductByName,GetProductByCode,如果你能在IQueryable上使用LINQ呢?

并且Queryable在n层方案中工作不好,因为您将无法访问另一层中的数据库连接,而不是返回延迟集的数据库连接.

我不认为"可查询"的概念和存储库应该适用于任何软件设计,因为它告诉存储库是无用的.

Queryable就像设计一个GetAll方法.存储库中GetAll的重点是什么?存储库将检索所有域对象,您将在业务中过滤它们.但是......等等......存储库不应该用某些标准检索域对象,是吗?

虽然我发现查询与存储库不兼容,但设计和实现一些接受lambda表达式或任何委托的存储库方法,以便为我提供某种过滤器或行为,这很好.这不是延迟执行,它是委托.