【问题标题】:What is wrong with placing models in a folder other than Models?将模型放在模型以外的文件夹中有什么问题?
【发布时间】:2013-06-17 07:48:22
【问题描述】:
我是 ASP.NET MVC 的新手。我浏览了几本书和代码示例。虽然我知道我想出了下面的问题,但不能清楚地理解下面的观点。
大多数书籍都解释说,将模型放在Models 文件夹中是一种约定优于配置。他们还声明 ASP.NET MVC 框架假定开发人员将模型放在该文件夹中。但是,大多数代码示例和许多其他开发人员将模型放在Models 以外的文件夹中,例如在单独的类库项目(即Services 项目)中的ViewModels。
这两种方式有什么区别吗?如果我们将模型放在Models 文件夹中,ASP.NET MVC 对模型有什么作用吗?他们有什么好的和坏的?你的项目做得如何?
【问题讨论】:
标签:
c#
asp.net-mvc
conventions
convention-over-configur
【解决方案1】:
大多数书籍都解释说,将模型放在模型文件夹中是一种约定优于配置。他们还指出,ASP.NET MVC 框架假定开发人员将模型放在该文件夹中。
这是错误的。唯一一次 asp.net-mvc 使用文件夹结构并需要其配置(显式或按约定)是在查找视图时。控制器具有以“控制器”后缀结尾的约定,而模型则没有。您可以随意放置模型。
【解决方案2】:
您不需要将模型添加到 Visual Studio 设置附带的模型文件夹中,这仅用于基本设置。您甚至不需要同一个项目中的模型,您可以将它们移动到不同的类库中,这在更大规模的应用程序中很常见。
但是,由于您只是在学习 MVC,因此可能值得将时间花在如何构建小型 MVC 应用程序上,而不是如何构建它们,然后再专注于这方面。
也看看这个链接,它可能会在ASP.NET MVC - separating large app以后派上用场
【解决方案3】:
模型是域对象的一种数据库表示,它是应用程序模型的表示,例如一辆摩托车......但是呈现摩托车的视图可能希望显示更多关于摩托车的信息而不是域对象表示的信息......因此出现了视图模型“模式”(其中有几个) ,它基本上“包含”域模型...
View Model 模式通常提供灵活性,如果您愿意,可以提供一种继承/混淆依赖关系。
物理模型文件确实可以放在任何地方,它只是一个类,使用需要引用。
例如领域模型
public class Motorcycle
{
public string Make { get; set; }
public string Model { get; set; }
public int Year { get; set; }
public string VIN { get; set; }
}
查看模型
public class MotorcycleViewModel
{
public Motorcycle Motorcycle { get; set; }
public SelectList MakeList { get; set; }
public SelectList ModelList { get; set; }
}