1

我尝试将存储库与实际的数据存储实现隔离开来。用这个抽象创建一些简单的查询我没有什么问题。

示例我需要按顺序列出订单行数的订单列表。

Repository 方法返回 OrderInfo 对象的列表。

class OrderInfo
{
    string Title { get; set; }
    int NumberOfLines { get; set; }
}

数据存储不包含任何直接包含订单行计数的字段,因此必须即时计算。

当查询直接写入存储库方法时,可以使用简单的 sql 查询(count + group by)轻松存档。

如果我尝试创建某种抽象层,我会迷失如何“定义查询而不使用任何依赖于存储的东西,包括它应该返回每个订单的订单行数”。

还是我完全走错了方向?

4

1 回答 1

0

如果您想允许在 BLL 中使用 IQueryable(我认为应该这样做),那么您可以根据需要定义查询。然后,您的 DAL 应该通过的标准之一是它可以与您的 BLL 一起使用,它应该能够采用 IQueryable,并使用它来读取一些数据。这样你就可以在你的 BLL 中“变得聪明”,并且 DAL 将被抽象。

例子:

  • BLL - 使用接口定义它。生成的上下文界面为您提供系统中的所有实体(=表)。这些实体将与IQueryable<entityType>. 实体是使用实体框架 POCO 定义的。
  • DAL - 一个实体框架上下文,其中上下文实现了您在 BLL 中定义的接口。

每一层都在它们自己的组件中。DAL 是使用一些依赖注入连接起来的。

请记住,这只是一个示例。

更新

阅读这篇关于洋葱架构的文章,这正是您想要做的。

于 2012-09-24T17:47:33.523 回答