命名约定 - 控制器的一个规则,没有模型和视图的规则

时间:2009-04-17 08:50:43

标签: asp.net-mvc model-view-controller naming-conventions

在ASP.NET中,MVC控制器存在于名为Controllers的文件夹中。他们的名字必须以Controller结束,否则事情就会失效(你得到HTTP 404错误)。

但是,模型名称不必结束Model,视图名称不必以View结尾。

这似乎不一致......为什么(从MVC或设计的角度来看)控制器名称必须结束Controller

其他MVC框架是否有此要求?

修改

由于这似乎是惯例,我并不主张反对它(见Convention over Configuration!),但我想了解其背后的原因。

2 个答案:

答案 0 :(得分:8)

控制器约定是如此路由可以轻松找到控制器而无需额外配置。添加所需的Controller结尾使您不太可能通过MVC路由意外地暴露对象。

还有一个内置的视图约定。默认情况下,视图应位于为控制器命名的文件夹中,并且与调用它们的操作命名相同,这使得方法调用操作中的View()可以在不指定视图的情况下工作。无论如何,我经常发现自己指定了视图,但是如果你正在寻找一个约定,那么这绝对是框架所鼓励的约定。

从模型的角度来看,你是对的,没有标准惯例。这是因为ASP.NET MVC框架永远不会直接触及模型。它需要控制器从路由中找到它们的约定,并且它需要一个视图约定来从控制器中找到它们......但模型只能从控制器中的逻辑访问,因此框架不需要知道它们。

话虽如此,我看到大多数人都在构建他们的模型,就像他们在MVC之前构建他们的实体或Domain模型一样。如果您正在使用活动记录模式,则将模型命名为与它们映射到的表对应,如果您更关注域,则将模型命名为与它们正在建模的域的部分相对应。此外,我看到越来越多的人创建了一组视图模型,这些模型仅用于向UI呈现数据,并通过从域中的各种模型中提取部分来创建。模型绝对是ASP.NET MVC中最不具意见的部分,但这是一件好事,因为人们有非常不同的方式在这个领域工作。

答案 1 :(得分:2)

这只是一项惯例而非要求!您可以通过自定义DefaultControllerFactory或创建自己的控制器工厂来更改此行为。

有关详情,请参阅here。 MvcContrib项目中还有一些示例从依赖注入引擎注入控制器。看看here