MVC View紧密耦合,无视MVC

时间:2014-08-24 18:21:40

标签: c# asp.net-mvc

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

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

紧密耦合视图将取决于模型,它将与Web表单相同,其中.aspx页面将依赖于其代码后面的页面。因此,测试将成为View的一个问题。

4 个答案:

答案 0 :(得分:1)

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

View与合同相关联,而非实施,因此它可以显示符合合同的任何内容。

  1. 您可以对模型进行模型化并使用视图对其进行渲染,以便在没有真实模型的情况下测试视图和合同。
  2. 可以独立实例化视图和模型。
  3. 只要保留合同,您就可以修改一个而不理解另一个。
  4. 可以使用各种视图(WPF,MVC Razor,ExtJS,WCF / Remote Client)呈现相同的模型。
  5. MVC与网络表单不同。视图中通常很少或没有代码。如果存在,则涉及显示/渲染,而不是数据或逻辑。您在webform页面中看到的大多数代码都会被移动到控制器或MVC中的Model / ModelView中。

答案 1 :(得分:1)

你很困惑强烈打字与紧密耦合。它们是两回事。

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

视图显示了模型,以及它的模型。它必须知道模型是什么才能呈现它。

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

答案 2 :(得分:0)

ASP.Net MVC可以像您(应用程序架构师)那样松散或紧密耦合。

如果您将视图键入具体的模型类,那么视图与模型的类型紧密耦合,但是如果您将视图键入接口,或者根本不键入它并使用动态类型然后它松散耦合。

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

底线是ASP.Net MVC 框架不能解决耦合问题,它只是为使用MVC 模式的Web应用程序架构提供框架。模式本身是为了分离关注点和基于责任的架构而设计的,它与耦合无关。

答案 3 :(得分:0)

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

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