Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 是微软公司';s的MVC实现不同于经典的MVC模式_Asp.net Mvc_Design Patterns_Model View Controller - Fatal编程技术网

Asp.net mvc 是微软公司';s的MVC实现不同于经典的MVC模式

Asp.net mvc 是微软公司';s的MVC实现不同于经典的MVC模式,asp.net-mvc,design-patterns,model-view-controller,Asp.net Mvc,Design Patterns,Model View Controller,在web上关于ASP.NET MVC的各种文章中,我有人提到微软的MVC实现与“经典”MVC模式有所不同 但我从未见过有人对此进行过详细的讨论,乍一看,我不知道ASP.NET MVC与所描述的有什么不同,比如说 所以我的问题是:ASP.NET MVC真的违反了任何MVC模式原则吗?问题在于MVC是一种松散定义的模式。“M”可以解释为“业务领域中的一切,从实体到业务逻辑” 我不会说ASP.NET违反了MVC,而是对其进行了松散的解释 一些官方的MVC示例直接在控制器中使用实体框架,这在我看来是不正

在web上关于ASP.NET MVC的各种文章中,我有人提到微软的MVC实现与“经典”MVC模式有所不同

但我从未见过有人对此进行过详细的讨论,乍一看,我不知道ASP.NET MVC与所描述的有什么不同,比如说


所以我的问题是:ASP.NET MVC真的违反了任何MVC模式原则吗?

问题在于MVC是一种松散定义的模式。“M”可以解释为“业务领域中的一切,从实体到业务逻辑”

我不会说ASP.NET违反了MVC,而是对其进行了松散的解释


一些官方的MVC示例直接在控制器中使用实体框架,这在我看来是不正确的。因为这样它就不会充当模型和视图之间的桥梁。相反,它负责业务逻辑(即使是非常基本的逻辑)并将模型信息映射到视图


NET MVC有一种称为视图模型的东西,它不是MVC中的M。相反,它们被用作模型(或模型中的一个或多个实体)和视图之间的适配器,从而接管了控制器的部分职责。

通常是的,微软的MVC模式实现遵循MVC模式的主要租户。它有一个模型、控制器和视图,负责UI稍微不同的方面(记住,在本例中MVC是一种表示模式,所以它只负责UI(大部分))

微软开始偏离的地方是引入了一些不太干净的(比如不是100%MVC)特性,特别是

  • 布局
  • 视图模型
上述一些问题比其他问题更具争议性。最终,所有这些都是为了加快开发速度而设计的,但不要认为控制器构建了一个模型,然后视图呈现(句号)

微软也倾向于将MVC解释为一种业务逻辑模式(如上所述,它是一种UI模式)

因此,在Microsoft世界中,您经常会看到这样一个示例:控制器从实体框架中获取模型(例如)执行一些业务逻辑(业务逻辑不应该真正在控制器中),然后将其传递到ViewModel(实际上不是100%MVC),然后视图呈现它(使用辅助函数处理数据)


因此,他们尝试将MVC作为一种“一刀切”的解决方案来销售,但实际上并非如此。

尽管我[在某些方面]同意其他答案,但让我从另一个角度来看待它

ASP.NET MVC不是一种模式,而是一种框架,您可以在其中使用MVC模式编写软件,或者更确切地说是使用其特定的web应用程序版本

你不应该担心微软的实施。他们对MVC框架的实现与MVC模式关系不大。为了实现它,我确信MS使用了许多不同的模式。这里的关键是要理解MVC框架不是MVC。它允许您使用MVC模式进行开发。在本例中,此模式包括您需要遵循的某些规则,就像在其他模式中一样-例如,在末尾使用
Controller
命名控制器。但这是MS为您提供的实现。因此,您有视图、模型和控制器。MVC框架告诉您,遵循规则,我们将为您连接所有这些


现在,如果您将MVC模式作为原始模式,它告诉您的一切——从控制器和模型中分离视图。并将模型与控制器分离。因为这样,您可以使用不同的视图重用模型和控制器。现在,您如何实施它-这取决于您。只要它具有我上面描述的特性,这就是MVC。同样,MS给了你们MVC框架,在这个框架中你们有独立的M-V-C。所以,当你们写你们的M,V和C时,你们有分离,这是最初的模式描述。MVC框架负责为您布线。

您能描述一下您认为ASP.NET MVC的哪些部分不符合MVC设计原则吗?否则,我担心这会变得相当基于观点。或者把问题转过来,比如“ASP.NETMVC是否实现了模型-视图-控制器设计模式的核心原则?”。或者更适用于全球:“HTTP应用程序是否可能并且可行,以正确地实现MVC设计模式中的原则X、Y和Z?”@CodeCaster,我的问题是,我不认为ASP.NET MVC的任何部分违反MVC设计原则。我的目的是找出其他人认为哪些部分违反了这一原则。“其他人认为”-是的,因此这是基于意见的。可能,但我发现许多问题是基于意见的,但仍然有用:“X的最佳实践是什么?”,“使用技术Y处理错误的正确方法”,等等。这些问题放在一边,我给了一些提示,让你用不同的措辞回答问题,这样你可以得到更多的答案,或者更好地回答你的实际问题,而不是让你的问题完结,但无论什么都能让你如愿以偿。我总是将“M”解释为视图模型,因为MVC是一种UI技术。业务逻辑可以在单独的层、web服务中,甚至在数据库中。@Ryan:来自wikipedia:
MVC的核心组件,即模型,根据其问题域捕获应用程序的行为,独立于用户界面
“实体框架直接在控制器中,我认为这是不正确的”-没错!域名在哪里?如果我明天不想用EF怎么办?所以,我们重复同样的错误。我们有控制器,而不是作为调解人或桥梁,现在是BLL和DAhmm。。。但是如果我们不在MVC中使用视图模型,控制器如何调整问题域对象以适应视图?