【问题标题】:MVC: Lean controller vs injecting the repository?MVC:精益控制器与注入存储库?
【发布时间】:2011-05-04 03:35:58
【问题描述】:

理想情况下,控制器应该没有域逻辑,对吧?
这与在书呆子晚餐中向其中注入存储库类有何匹配?

如果您是不将存储库注入控制器的人之一,您如何命名包含引用存储库访问器的代码并与模型类一起工作的应用程序/域层类?还是进一步拆分?怎么样?

添加到问题中:

对于上述问题,请您考虑以下三种情况:

  1. 检索模型并返回视图
  2. 接收表单编辑以验证并保存到数据库
  3. 订单处理

我希望这个补充可以使问题更清晰,以便我们可以参考常见的场景类型。

【问题讨论】:

    标签: asp.net-mvc model-view-controller architecture


    【解决方案1】:

    我们将存储库接口注入到我们的控制器中,因此我们的控制器不关心域逻辑实现。我们的 IoC 容器负责确定使用哪个类作为每个存储库接口的实现。

    【讨论】:

    • 当然,您在控制器中指定了一个接口,但通过您的容器注入了该接口的具体实现。
    • @UpTheCreek:没错。关键是控制器的代码没有域逻辑。
    • 我并没有真正考虑新的 vs 注入,而是应该直接从控制器使用存储库 + 模型或包装在域层中。什么是好的做法?
    • @Carl R:我们的存储库接口严格在表示域级模型的 POCO 上工作,因此我们不处理控制器本身中的任何数据层类。存储库接口的实现涉及将域级模型转换为代表我们的数据级模型的东西。
    • 这对于 CRUD 来说听起来不错,但对于订单处理或其他多步骤操作,这听起来像是控制器开始编排多个 POCOS 和工作流(即域逻辑)? (或者您的描述中缺少某些内容。)
    【解决方案2】:

    数据访问逻辑!= 域逻辑

    如果您尝试执行 DDD,则可以使用存储库注入控制器。

    根据我目前使用的模式,我将事物命名为 ElephantRepository、ElephantService 或 ElephantQuery。


    我真的很想看到一个没有从控制器访问存储库/服务/dal 层的 MVC 应用程序。 ;)

    【讨论】:

    • 我不明白你所说的 DAL 是什么意思!= 域逻辑。很明显,苹果不是香蕉,但你的意思是什么? :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-22
    • 1970-01-01
    • 2021-10-06
    • 1970-01-01
    相关资源
    最近更新 更多