将模型放在模型以外的文件夹中有什么问题?

时间:2013-06-17 07:48:23

标签: c# asp.net-mvc conventions convention-over-configur

我是ASP.NET MVC的新学习者。我查看了几本书和代码示例。虽然我知道我提出了以下问题但无法清楚地理解以下几点。

大多数书籍都说明将模型放在Models文件夹中是一个约定优于配置。他们还声明ASP.NET MVC框架假定开发人员将Models放在该文件夹中。但是,大多数代码示例和许多其他开发人员将模型放在Models以外的文件夹中,例如ViewModels在单独的类库项目中(即Services项目)。

这两种方式有什么不同吗?如果我们将它们放在Models文件夹中,那么ASP.NET MVC对模型有什么作用吗?他们有什么好处和坏处?你是如何为你的项目做的?

3 个答案:

答案 0 :(得分:3)

  

大多数书籍都说明将模型放在模型文件夹中是一个约定优于配置。他们还声明ASP.NET MVC框架假定开发人员将模型放在该文件夹中。

这是错误的。 asp.net-mvc唯一一次使用文件夹结构并且需要其配置(显式地或通过约定)是在查找视图时。控制器的约定以后缀“Controller”结束,而型号没有。您可以随意将模型放置在任何您喜欢的地方。

答案 1 :(得分:1)

请参阅this link for more info

模型是域对象的一种数据库表示,它是应用程序模型的表示,例如,摩托车...但是让摩托车可能希望显示有关摩托车的更多信息的视图比领域对象所表示的更多......以及视图模型'模式'(其中有几个) ,基本上“包含”域模型......

视图模型模式通常提供灵活性,如果你愿意,可以提供一种依赖的继承/混淆。

物理模型文件确实可以放在任何地方,它只是一个类,需要引用它。

e.g。域模型

 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; }
 }

答案 2 :(得分:1)

您不需要将模型添加到Visual Studio设置附带的模型文件夹中,这仅适用于基本设置。您甚至不需要同一项目中的模型,您可以将它们移动到不同的类库中,这在大型应用程序中是可见的。

但是,由于您只是在学习MVC,因此可能值得花些时间研究如何构建小型MVC应用程序,而不是如何构建它们,然后专注于这方面。

请看一下这个链接,稍后可能会在ASP.NET MVC - separating large app

上派上用场