【问题标题】:In MVC, should the View know the Model?在 MVC 中,视图应该知道模型吗?
【发布时间】:2015-03-13 01:20:07
【问题描述】:

视图是否应该知道模型:

或不:

?

【问题讨论】:

标签: oop model-view-controller


【解决方案1】:

不,模型和视图通过控制器进行通信。

我的意思是,您可以让它们彼此认识,但这会导致紧密耦合并且难以扩展应用程序的功能。

【讨论】:

  • 它究竟是如何在视图中“引入紧密耦合”的?特别是因为您的“解决方案”不仅会导致模型和视图出现相同类型的“耦合”(无论您使用该词是什么意思),而且还会违反 LoD。
【解决方案2】:

程序员通常会简化此操作并使视图特定于模型。例如,如果您在 CRM 应用程序中,模型可能有一个 firstName 字段;然后视图假定它给出的模型对象有一个 firstName 字段,并在适当的位置显示它。

这当然是不可重复使用的。如果您正在制作一个视图来显示数据表,那么它不应该关心哪个模型字段显示在哪个列中。它应该只以通用方式处理显示和格式化表格数据。但是,如果您的视图是针对其显示的特定数据定制的网页,那就没问题了。

因此,您必须根据具体情况决定是希望视图了解其显示的特定数据,还是希望它成为可重用组件。

无论哪种方式,对模型数据的任何更改都应始终通过控制器进行。控制器负责执行您的业务逻辑,而当有其他东西绕过它时,这是不可能的。

【讨论】:

  • 模型应该包含业务逻辑并且控制器强制执行它——这是一个重要的区别。控制器不应该知道为什么会发生某事,但它应该知道当某事发生时如何响应。我经常看到人们将业务逻辑嵌入到他们的控制器中。
【解决方案3】:

根据权利,Model,底层业务实体,不应该直接暴露给 View。我们通常使用 ViewModel,一种特定于演示的模型,它派生自一个或多个模型。

【讨论】:

  • 没有。这就是你在 MVVM 中所做的。问题是关于 MVC 的。 “按权利”,MVC 的原始定义让 View 知道并与 Model 进行通信。
猜你喜欢
  • 2011-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-26
  • 1970-01-01
  • 2013-03-25
  • 2011-04-18
  • 2023-04-03
相关资源
最近更新 更多