我读过的大多数MVC教程似乎都为每个模型创建了4个视图对象。例如,如果我的模型是"Foo",似乎有4个.cshtml文件: Foo/Create、Foo/Delete、Foo/Details和Foo/Edit。使用VisualStudio“搭建”帮助器也可以做到这一点。
这真的被认为是MVC的最佳实践吗?有4个类彼此80-90%相同,这感觉是错误的。当我向Foo添加一个新字段时,我需要编辑所有4个.cshtml文件。这种双维护(四维护?)只会让我的皮肤起鸡皮疙瘩。
请告诉我:是否有一个预期的/可接受的最佳实践以不同的方式处理此问题?或者,如果这真的是公认的最佳实践,请告诉我为什么四元维护不应该让我感到不安。
我是一个相当熟练的ASP.NET / c# / OO设计的老手,但对MVC来说却是个新手;所以如果这是一个新手问题,很抱歉。提前感谢您的帮助!
编辑:感谢您的回复!我标出了最彻底的一个作为答案,但对所有有用的问题都给予了高度评价。
发布于 2011-10-13 04:23:21
您可能需要两到四个不同的视图:
因此,如果您的模型没有太多的属性可以在一个表中显示所有属性,并且如果您没有用于检查的静态的、不可编辑的视图,那么您可以只使用List和Edit,并删除其他两个。
但是,如果您更新模型,这并不能解决双重(或三重)维护的问题。对于这一点,还有其他魔法;)
在ASP.NET MVC3中,HtmlHelper上有一些允许您执行Html.DisplayForModel()和Html.EditorForModel()的扩展。它们使用预定义的模板将自己嵌套到您的对象中,并为所有公共属性绘制显示/编辑字段。如果您向DisplayForModel传递一个IEnumerable<Foo>,它将创建一个具有列标题的表,这些列标题是Foo的属性名称(如果您提供了DisplayName属性信息,则使用它),并且其中每一行表示一个Foo实例。如果您给EditorForModel一个Foo,它将为Foo上的每个公共属性创建一个<label>和一个<input>。
如果您对默认设置不满意,这些强大的扩展方法使用的所有模板都可以由您替换。这既可以在Foo级别上完成,在这种情况下,您可以回到双重维护场景中,也可以在较低级别(如string或DateTime)上完成,以影响使用模板生成的所有编辑器/显示字段。
要了解更多关于这是如何工作的信息,请访问google "ASP.NET MVC 3 editor templates"并阅读一些教程。他们会比我更好地解释细节。
发布于 2011-10-13 04:27:39
ASP.NET MVC为您创建的视图不一定是您在生产中使用的视图。我发现这些在开发快速原型或测试数据库CRUD操作时非常方便。您可以随意创建您想要处理操作的任何视图。
我通常只有一个或两个视图来处理基本操作,而不使用生成的内置视图。例如,1个视图用于添加、编辑或详细信息,1个视图用于显示对象列表。
发布于 2011-10-13 05:42:42
这完全取决于您的应用程序。
如果您只有一个项目,则不需要列表视图。如果你不能编辑它,那么你就不需要编辑视图。Create和Edit通常可以是同一个视图,除非您需要在其中一个视图中执行特殊操作,而不是在另一个视图中执行特殊操作。
换句话说,可以根据需要使用任意多的视图。这里没有硬性规定。脚手架就是用来帮助你上路的。使用脚手架,许多类型的应用程序都可以很好地工作,并且不需要高级HTML或Javascript。
为什么你想要多个视图?好吧,让我们看看显示和编辑函数。您可以创建一个视图,在该视图中使用if语句来确定视图的编辑模式,但是这将使视图逻辑变得复杂,并且视图应该尽可能简单。
创建独立视图的原因是它比一个包含大量条件逻辑的巨型视图更容易维护。
https://stackoverflow.com/questions/7745607
复制相似问题