【发布时间】:2012-09-24 16:39:47
【问题描述】:
我尝试将存储库与实际的数据存储实现隔离开来。使用这种抽象创建一些简单的查询几乎没有问题。
例如,我需要按顺序列出订单行数的订单列表。
Repository 方法返回 OrderInfo 对象列表。
class OrderInfo
{
string Title { get; set; }
int NumberOfLines { get; set; }
}
数据存储不包含任何直接包含订单行数的字段,因此必须即时计算。
当查询直接写入存储库方法时,可以使用简单的 sql 查询(count + group by)轻松归档。
如果我尝试创建某种抽象层,我迷失了如何“定义查询而不使用任何依赖于存储的东西,包括它应该返回每个订单的订单行数”。
还是我完全走错了方向?
【问题讨论】:
-
为什么?存储库的目的是将应用程序与数据存储实现隔离开来。你为什么要隔离隔离?对我来说,这听起来像是过度设计。
-
好吧...我已经读过存储库属于 BLL 但它的实现是在数据层中(无论它在实践中意味着什么)...?如果我有此类 OrderInfo 并将其放入域中(因为它暴露于 UI 并且 UI 不知道数据层)...数据层如何知道有关 OrderInfo 的任何信息?
-
@MystereMan 分层的基本定义是你想要层之间的松散耦合;有时这意味着仅通过抽象进行耦合。
-
@PeterRitchie - 我知道。这就是存储库的重点,它是一个简单的外观。抽象数据层。您通常使用存储库的接口,然后通过构造函数注入将具体实现传递给您的业务对象。
标签: c# ddd-repositories