【发布时间】:2010-09-20 22:25:48
【问题描述】:
在 ASP.NET MVC 中,我们需要为所有控制器使用后缀“Controller”。这似乎是不必要的限制 - 是否有技术原因?
我主要只是好奇,但可以看到更灵活的命名规则可以改善代码组织的情况。使用反射搜索Controller 派生类不能轻松发现可能的控制器类吗?或者要求控制器类标有ControllerAttribute?
【问题讨论】:
标签: asp.net-mvc code-organization
在 ASP.NET MVC 中,我们需要为所有控制器使用后缀“Controller”。这似乎是不必要的限制 - 是否有技术原因?
我主要只是好奇,但可以看到更灵活的命名规则可以改善代码组织的情况。使用反射搜索Controller 派生类不能轻松发现可能的控制器类吗?或者要求控制器类标有ControllerAttribute?
【问题讨论】:
标签: asp.net-mvc code-organization
MVC 社区深受Ruby on Rails 的影响,它重视“convention over configuration”。通过统一命名,应用程序可以零配置运行。
【讨论】:
这种约定的好处之一是 URL 段、控制器和模型类都具有相同的名称是很常见的。
网址:/产品/ 控制器:产品:控制器 型号:产品
这会导致命名冲突。所以我们约定了控制器名称后缀为“Controller”以避免这种冲突。但是,您可以通过我们的可扩展性 API 覆盖此行为。
【讨论】:
ProductsController (/products/1) 而模型实体是单数形式,如 Product 因为集合显示视图将使用模型IEnumerable<Product>。所以无论如何也不会有冲突。但是约定很好,因为它也用于其他地方(没有人抱怨),如在属性、集合、字典、列表等中。这些类型也按惯例使用后缀。当然是出于开发可用性的原因。