繁体   English   中英

如何为mvc项目设置架构

[英]How to setup architecture for mvc project

我正试图搞定MVC。 我来自ASP.Net背景。

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

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

请问有人可以解释我在这里失踪的内容吗? 我做得不对吗?

MVC确实将“M”部分留给了开发人员。

即使在他们的官方示例中,您也会看到变化。 您的问题暴露了一个关于MVC的最常见的误解。 您不应将域或数据模型直接绑定到视图,也不应将控制器方法接受为参数。 关于过度和不足的帖子,请参阅此帖子

理想情况下,您的控制器将调用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;
   }
}

更新 :根据您的评论, 这是一个关于一个用户的项目布局的优秀答案

当我开始使用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应用程序中解耦的地方。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM