我正试图抓住MVC。我来自ASP.Net背景。
创建新的mvc 3应用程序后,我在同一个webapp项目下获得了Controller,Models和views。在ASP.Net中,我们通常为模型和控制器创建单独的项目(我假设它们与业务层相同)。我还为DAL创建了一个单独的项目,我将使用EF。
我很困惑,因为这是理想的解决方案结构?我们不应该为每一层创建单独的项目吗?由于我创建了DAL作为一个单独的项目,我不得不在其中添加WebApp的引用,因为我想从DAL返回Model,因此我现在无法在我的WebApp中添加DAL的引用。
有人可以对我在这里失踪的东西有所了解吗?我做得不对吗?
答案 0 :(得分:6)
MVC确实将“M”部分留给了开发人员。
即使在他们的官方示例中,您也会看到变化。您的问题暴露了一个关于MVC的最常见的误解。您不应将域或数据模型直接绑定到视图,也不应将控制器方法接受为参数。请参阅this post on over and under-posting。
理想情况下,您的控制器将调用DAL,并且某些机制会将这些数据或域模型映射到View模型。正是那些View模型 - 专门用于促进UI的模型 - 应存在于WebApp“Models”文件夹中。
所以,你肯定在正确的轨道上创建一个新的程序集来包含你的DAL。映射到ViewModel的“最简单”机制之一是每个ViewModel上的一个简单方法:
public class MyWidgetFormModel()
{
public string Name { get; set; }
public string Price { get; set; }
public MapFromDAL(DAL.Widget widget)
{
this.Name = widget.Name;
this.Price = widget.Price;
}
}
更新:根据您的评论,here is an excellent answer了解一个用户的项目布局。
答案 1 :(得分:3)
当我开始使用MVC时,我遵循Jeffrey Palermo洋葱架构。你可以阅读它:
此处:http://jeffreypalermo.com/blog/the-onion-architecture-part-1/
此处:http://jeffreypalermo.com/blog/the-onion-architecture-part-2/
在这里:http://jeffreypalermo.com/blog/the-onion-architecture-part-3/
它正在使用IoC支持解耦服务。我认为您应该考虑使用IoC容器,因为MVC架构被认为是使用IoC来解耦服务(层)的模式。
您还可以使用洋葱架构从http://codecampserver.codeplex.com/下载工作样本。
它不是唯一可以与MVC一起使用的架构,但它是一个非常好的起点和了解IoC并在MVC应用程序中解耦的地方。