MVC控制器应该如何组织?

时间:2014-06-29 13:36:30

标签: asp.net-mvc

  1. 是否应该如何组织控制器?

  2. 只有在控制器链接到域模型时才应创建控制器吗?

  3. 例如,如果我有一个' 产品' model,我会有一个 ProductController ,它会有诸如' GetProductDetails '之类的动作。等...

    但是那些没有实际模型的东西,例如搜索产品,以及在页面上返回多个产品呢?

    由于 Product 模型是所有这些交互的基础模型,因此该功能是否应包含在 ProductController 中并具有搜索和显示多个产品的操作,或者应该另一个是为搜索创建的?

2 个答案:

答案 0 :(得分:1)

如果您遵循visual studio中使用的脚手架所使用的模式,那么您最终每个实体使用一个控制器,因此产品控制器将具有返回列表,单个产品和发布更新的操作的操作。此外,您可能还有其他搜索操作和任何其他与产品相关的操作。这只是陈述和加强推断的答案。

然而,你之所以这样做,是因为它意味着你的代码更容易维护 - 如果你正在寻找与你有一个控制器类可以查看的产品的代码。你也是每个控制器都遵循关注点分离的原则,只关注一种类型的实体。

除此之外,如果您的应用程序变得更大并且您使用IoC /依赖注入模式,那么您只需要为每个控制器注入一个存储库或业务服务,该控制器是一个搜索控制器,提供搜索产品的方法,客户需要客户和产品的服务或存储库,但请求可能只是客户搜索,因此产品存储库的创建毫无意义,因此您的代码效率低下且过于复杂。有一些模式可以解决这个问题,但它们涉及更多的代码,以避免这种情况,并保持简单地坚持一个根实体一个控制器。

答案 1 :(得分:0)

您应该使用相同的控制器管理涉及相同资源的每个操作,并且您应该根据 Richardson Maturity Model

实施该解决方案
  

一个模型(由Leonard Richardson开发)打破了   REST方法的主要元素分为三个步骤。这些   介绍资源,http动词和超媒体控件。

所以您的API将是这样的:

/ api / products GET 获取所有类别的完整列表

/ api / products / 123 GET 获取单个类别的详细信息

/ api / products PUT 替换整个类别列表 给出的那个

/ api / products / 123 PUT 更新指定的类别

/ api / products POST 创建新类别

/ api / products 删除删除所有类别

/ api / products / 123 删除删除指定的类别