在理想的MVC中,视图应该知道模型吗?

use*_*291 7 language-agnostic model-view-controller design-patterns

我的问题是理想的或原始的MVC解释 http://heim.ifi.uio.no/~trygver/themes/mvc/mvc-index.html

由于MVC的目标是减少依赖性,View应该知道模型吗?然后什么会阻止它变胖,直接调用模型方法而不问控制器?

更新:当我阅读下面的答案时,我将举一个具体的例子:

假设您创建了一个复杂的计算器(不仅仅是一些简单的计算器,让我们说股票市场的一个选项价格).它只需要股票价格,利率,波动率等投入.那么为什么我要创建一个包含视图中方法的整个模型的引用,因为我只需要这些输入变量?

为什么控制器不会在视图中发生变化时通知,然后仅使用输入回调视图中的方法?

例如,我在这里看到View有一个对整个模型的引用:

http://leepoint.net/notes-java/GUI/structure/40mvc.html

private CalcModel m_model;
Run Code Online (Sandbox Code Playgroud)

Bal*_*usC 18

视图不应该知道业务模型,这取决于控制器.但是,视图应该知道数据模型.还有什么必须呈现它?

也可以看看:

  • @user:视图具有对模型的引用以显示数据.视图尚未创建它.视图不会在模型上调用操作/业务方法.控制器这样做.视图仅访问数据方法(通常是getter方法)以获取要显示的数据.此外,必须注意"模型"(业务或数据)中的模糊性.链接的示例将业务和数据模型紧密耦合在一个类中. (2认同)

duf*_*ymo 8

然后什么会阻止它变胖,直接调用模型方法而不问控制器?不问控制器?

我发现这有点幽默.观点没有他们自己的想法,但程序员可以.他们是做出错误决定的人,并允许View做它做的事情.

View必须足够了解Model才能显示.如果您的程序员无法控制自己,一个答案可能是使他们的Model对象不可变.

另一种可能是使用AOP.编写一个方面,以防止对来自其他服务或控制器的服务层的调用.

还有另外一个观点:AJAX是关于视图将事情掌握在自己手中并在未经任何人许可的情况下调用服务,以异步方式执行操作并提高响应性以获得更好的用户体验.这是一个很好的事情.

不要太挂在建筑纯度上.MVC是一个很好的模式,在适用的地方非常有用.了解规则; 知道什么时候打破规则是合适的.不要那么教条 - 在编程或生活中.


Ste*_*tti 4

是的,在 MVC 中视图了解模型。事实上,视图的工作是显示模型,因此它必须了解模型。模型应该相当简单,并且不应该是状态的容器(即,字符串、整数等属性)——它不应该真正具有方法。

控制器了解视图和模型 - 控制器的工作是获取适当的模型并将其传递给适当的视图。

模型应该幸福地不知道控制器或视图。

这是 MVC (SoC) 中典型的关注点分离,其中每个组件都有其明确定义的“工作”。

  • “它还包含方法” - 这是主观的,取决于你问的是谁。:) 另外,通常我们使用“视图模型”,它“仅”包含您想要显示的数据。这可能与您的域模型 100% 匹配,也可能不匹配。 (2认同)
  • 是的,这仍然是主观的。多年来,模式一直在不断调整,您会在整个技术领域看到大量不同的 MVC“风格”和实现。图案从来都不是一刀切的。 (2认同)