0

Linq to SQL 创建 IQueryable 且充满关系的对象。
Html Helpers 需要特定的接口对象,例如IEnumerable<SelectListItem>.

我认为可能发生的事情:

  • 重用从 Linq 到 SQL 的对象,而不需要所有的包袱,即,从 Linq 到 SQL 对象返回 Pocos 而不需要额外的域模型类?
  • 提取易于转换为(或现在是)Html 辅助对象的对象,如 SelectListItem 枚举?

有没有办法在不破坏关注点分离的情况下做到这一点? 一些巧妙的 oop 技巧来满足需求?

例如,如果它在存储库中,则 SelectListItem 将不存在。这select new是一种从 Linq 到 SQL 中删除对象而没有包袱的好方法,但它仍然引用了一个不应被引用的类:

 IEnumerable<SelectListItem> result = (from record in db.table
                                       select new SelectListItem {
                                           Selected = record.selected,
                                           Text= record.Text, 
                                           Value= record.Value }
                                      ).AsEnumerable();
4

2 回答 2

2

我见过 IService 接口和 Service 类的用户。基本上它是存储库和控制器之间的步骤。

优点:

  • 允许操作 IRepository 操作的返回值的方法
  • 良好的关注点分离
  • 可以是在涉及存储库之前验证逻辑所在的桥梁。
  • 可以使用依赖注入框架/模式

缺点:

  • 多多重复代码。除非您公开存储库,否则您可能会在 IService 中复制几乎所有 IRepository 方法
  • 可以成为一个“包罗万象”的班级。无所不能的神级!哇哈哈……等等

我敢肯定还有更多,但这是我见过和使用过的东西。

于 2010-04-06T03:59:51.333 回答
1

在此特定示例中,您可以在部分类定义中创建 ToSelectListItem() 方法或类似方法以删除重复项。或者也许一个扩展方法会更好地避免那里的一些耦合。

编辑:我通常使用带有 DTO 的 JSON Web 服务。我可能有 ProductDto,它是我的 Product L2SQL 实体的扁平化 JSON 友好表示。然后我只需要在我的查询中调用 select ProductDto.FromProduct(product) 。现在重复很少。

于 2010-04-06T03:54:11.520 回答