C# MVC视图紧密耦合,不符合MVC

C# MVC视图紧密耦合,不符合MVC,c#,asp.net-mvc,C#,Asp.net Mvc,MVC是使用MVC的松散耦合的。 控制器-模型-视图是松散耦合的,因此测试很容易 但是,当我们使用紧密耦合的视图时,即视图与模型紧密耦合时,视图如何独立且与模型无关呢 紧密耦合视图将取决于模型,它将与Web表单相同,其中.aspx页面将取决于其页面隐藏代码。因此,测试将是一个值得关注的问题。松散耦合并不意味着松散契约。合同是明确的 视图是针对契约而非实现进行耦合的,因此它可以显示满足契约的任何内容 您可以模拟模型并使用视图进行渲染,以在不使用真实模型的情况下测试视图和契约 视图和模型可以独立实例

MVC是使用MVC的松散耦合的。 控制器-模型-视图是松散耦合的,因此测试很容易

但是,当我们使用紧密耦合的视图时,即视图与模型紧密耦合时,视图如何独立且与模型无关呢


紧密耦合视图将取决于模型,它将与Web表单相同,其中.aspx页面将取决于其页面隐藏代码。因此,测试将是一个值得关注的问题。

松散耦合并不意味着松散契约。合同是明确的

视图是针对契约而非实现进行耦合的,因此它可以显示满足契约的任何内容

  • 您可以模拟模型并使用视图进行渲染,以在不使用真实模型的情况下测试视图和契约
  • 视图和模型可以独立实例化
  • 只要合同得到保留,您可以在不理解另一个的情况下修改其中一个
  • 同一个模型可以用不同的视图(WPF、MVC Razor、ExtJS、WCF/远程客户端)呈现

  • MVC与web表单不同。视图中通常很少或没有代码。如果有,它与显示/渲染有关,而不是数据或逻辑。您在webform页面中看到的大多数代码都会被移动到MVC中的控制器或模型/模型视图中。

    ASP.Net MVC可以是松散耦合的,也可以是紧密耦合的,只要您是应用程序架构师想要

    如果将视图键入一个具体的模型类,则视图与模型的类型紧密耦合,但是如果将视图键入一个接口,或者根本不键入视图并使用动态类型,则视图是松散耦合的

    控制器和模型也是如此,您可以在控制器中实例化一个具体的模型类(紧密),也可以使用模型接口和可配置的模型工厂(松散)


    总之,ASP.NETMVC框架不是用来解决耦合问题的,它只是为利用MVC模式的web应用程序架构提供了一个框架。模式本身是为分离关注点和基于责任的体系结构而设计的,它与耦合无关。

    您将强类型与紧耦合混淆了。它们是两种不同的东西

    在视图中强键入模型没有问题。这与代码隐藏不同,因为代码隐藏具有事件、重载和其他类型的逻辑。模型在MVC中通常是严格的数据

    视图显示模型,仅此而已。它必须知道模型是什么,才能进行渲染


    因为视图不依赖于特定实例,所以它不是紧密耦合的。您可以传入实现强类型约定的任何对象

    视图的强类型模型并不意味着视图与模型紧密耦合。可以让多个视图使用同一模型。如果您不喜欢强类型模型的概念,请使用动态模型


    使用webform aspx页面,您无法真正轻松地对代码进行单元测试。与MVC一样,对控制器进行单元测试非常容易。

    Uhh。。什么?您不能在强类型模型上执行duck类型。只能在非强类型的动态模型上执行此操作。大多数人使用强类型模型,其中模型类型在带有@model语句的视图中显式定义。@ErikFunkenbusch-Yeh我写这篇文章时考虑到了动态模型,但现在你调用了它,我意识到我最近在ASP.NET MVC中写的大多数项目都使用强类型视图,除了一个奇怪的情况。我在使用动态绑定视图的Web Work和Struts2中与MVC共事了好几年,当我第一次转换到ASP.NET MVC 2和3时,在转换到强类型之前,我经常使用ViewData和ViewBag。它从未真正进入我的脑海。我的意思是,我知道@model是如何工作的,但当我想到MVC视图时,我仍然会想到动态绑定功能。