如何为mvc项目设置架构

时间:2011-06-17 21:59:03

标签: c# asp.net-mvc architecture

我正试图抓住MVC。我来自ASP.Net背景。

创建新的mvc 3应用程序后,我在同一个webapp项目下获得了Controller,Models和views。在ASP.Net中,我们通常为模型和控制器创建单独的项目(我假设它们与业务层相同)。我还为DAL创建了一个单独的项目,我将使用EF。

我很困惑,因为这是理想的解决方案结构?我们不应该为每一层创建单独的项目吗?由于我创建了DAL作为一个单独的项目,我不得不在其中添加WebApp的引用,因为我想从DAL返回Model,因此我现在无法在我的WebApp中添加DAL的引用。

有人可以对我在这里失踪的东西有所了解吗?我做得不对吗?

2 个答案:

答案 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应用程序中解耦的地方。