【问题标题】:ASP.NET MVC/Service Layer/Repository/EF4/POCO - Am I thinking right?ASP.NET MVC/Service Layer/Repository/EF4/POCO - 我想对了吗?
【发布时间】:2011-07-04 13:17:45
【问题描述】:

我一直在开发一个新的 ASP.NET MVC 应用程序,并尽我所能使用 EF4 和 POCO 类来实现服务层/存储库/UOW 模式。

帮我看看我是否理解正确。

为了简单起见,假设客户正在请求查看客户的视图。

1) 客户端向 CustomerController 请求视图。
2) CustomerController 创建一个新的 UOW 和一个新的 CustomerService 传入 UOW
3) CustomerService 创建一个新的 Repository(Of Customer) 并传入它从 CustomerService 收到的 UOW .在这一层,您可能会说“您可以查看此客户吗?”
4) CustomerRepository 处理从 EF4 获取 POCO 类。
5) CustomerRepositoryPOCO 类交还给 CustomerService,然后由 CustomerService 将它们交还给 CustomerController
6) CustomerController 使用 POCO 类来填充 CustomerViewModel,然后将 CustomerViewModel 交给 >客户视图

我仍然对为什么/在哪里使用 AutoMapper 感到有些困惑???

对此的任何建议将不胜感激。

【问题讨论】:

  • 听起来很复杂。这个应用程序有多大?除非它是一个巨大的企业应用程序,否则可能不需要这么多的仪式。请参阅nerddinnerbook.s3.amazonaws.com/Part3.htm 以获取可能适用于您的应用程序的简单存储库模式的示例。当您需要一种简单的方法将 ViewModel 连接到底层模型对象时,可以使用 Automapper。

标签: entity-framework-4 asp.net-mvc-3 repository-pattern poco service-layer


【解决方案1】:

AutoMapper 可用于从 POCO 类“自动”填充 CustomerViewModel,而不是手动编写左侧 = 右侧代码。但是,如果您对自定义代码感到满意,则无需使用 AutoMapper。它只是一个减少自定义、无聊和容易出错的代码的工具。

【讨论】:

  • 我想我不明白你为什么不让视图模型使用 POCO 类?视图模型上是否有对象或只是简单的属性。与 CustomerViewModel 一样,它是否具有 Customer 类型的属性,还是具有 FirstName、LastName、Address 等?如果我的 View Model 有一个 Customer 和一个 CustomerAddress 的集合等,AutoMapper 可以将其展平吗?
  • @Sam Satriano,它是双向的。对于更简单的视图模型,视图模型类可以简单地包含 POCO 类。但是,这种方法使视图模型和 poco 类紧密耦合。许多人反对它并建议将视图模型完全分开。我已经看到并做过两种方式,就像其他事情一样,两种方式都有优点和缺点。这是您必须自己做出的决定,即您希望在应用程序中分离多少。
  • 所以如果我想使用 AutoMapper 并从视图模型中分离出 POCOS,你会怎么做?您是否创建了一整套将您的 POCOS 模仿到另一个程序集或其他东西的类,然后使用 AutoMapper 将 POCOS 映射到要在视图模型中使用的视图模型对象?
  • @Sam Satriano,视图模型类不模仿 POCO,而是代表视图。我们想要编写它们的唯一原因是它们可以绑定到视图。有了这些,我们需要编写自定义代码,在视图模型和 POCO 之间复制值。 AutoMapper 工具可以帮助减少自定义代码。
  • 抱歉打扰了,但你是一个很好的资源 :) 你碰巧有我可以看到的 View Model/AutoMapper 示例吗?
【解决方案2】:

Automapper 由工具自动生成,可以放入 DAL。如果我们想替换实体框架本身,那么我认为我们可以重用 automapper 类。

类似的尝试,可以在GitHub中找到

TechNet

【讨论】:

    猜你喜欢
    • 2011-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多