刮除命令查询的存储库模式,但是

时间:2014-04-23 00:41:42

标签: c# linq entity-framework repository-pattern

一点经验告诉我,存储库模式不适合我,所以我采取了不同的方法。将大量查询包装到对象中以及直接访问数据层的较小“常规”查询。

但是我不想允许使用POCO数据模型persé,而是将它们包装在我的专用域模型中。

我这样做的通常方式是这样的(域模型类在其内部构造函数中采用'source'参数) DbContext.Employees.Select(x => new DomainModel.Employee(x))

有没有什么方法可以安全地解决这个问题,这样我就可以对我的心灵内容执行LINQ查询了,但是回到我期望的域模型,却不知道下面会发生什么?

我考虑创建一个包含数据模型版本的“域模型DbContext”类,并在每个属性中执行上述操作,但我不完全确定这是否会对我的查询组成产生负面影响。

有任何帮助吗?谢谢

2 个答案:

答案 0 :(得分:0)

我喜欢在DAL和业务层之间建立数据服务层。数据服务层使用DAL和其他数据服务类,并返回DTO集合中的数据。没有理由将您的架构泄漏到您的业务代码中,您可以使用Linq来塑造粗粒度的结果集。

实现并不痛苦,它让您处于完美的位置,可以重用查询,重构和修复错误,从模式错误中恢复,而不会破坏您的客户端。它还使您处于完美的形状,以集成交叉问题,如缓存,日志记录和异常处理。

答案 1 :(得分:-1)

使用域名的存储库模式,这是它的目的。您的命令查询基本上是没有语义的存储库的位。因此,保留业务存储库(命令)并使用查询对象进行查询。重新发明轮子是没有意义的,但是否则就是这么说。