我有一个MVC应用程序,我通常让控制器传递视图所需的一切。但是当我的视图嵌套在其他视图中时,将这些变量转发到嵌套视图是一件痛苦的事。
这是怎么回事,或者我应该允许嵌套在我的视图中的部分/片段从模型中检索数据?
作为一个例子,我有一个状态列表,我在几个嵌套的部分/片段中使用。每次我只想在这些视图中的嵌套部分/片段上使用它时,我必须通过我的视图传递此列表。看起来它很容易出错,感觉不是很干。
答案 0 :(得分:3)
View 永远 事实上,MVC范例的重点是每个组件与另一个组件松散耦合。因此,您可以轻松交换我们的模型或视图。如果将模型代码放在View中,则无法执行此操作。
助手或其他模块倾向于缓解这些情况下的痛苦。我建议调查那些。还有“Fat Models,Skinny Controllers”的概念,在您的模型中添加更多内容,因此更容易访问跨多个控制器共享的数据。
最后,这取决于你。 MVC线可能变得模糊。但是,IMO直接从View访问模型违反了核心概念。
答案 1 :(得分:3)
直接从模型中读取视图是完全有效的。
查看维基百科文章或Martin Fowler的照片:http://martinfowler.com/eaaCatalog/modelViewController.html
答案 2 :(得分:0)
在几个小型MVC“小部件”(控制器)上拆分主applogic,其中每个“小部件”都与Model有关系并拥有独立的View。然后,在执行应用程序期间,您只需在运行时执行小部件,并传递给主模板“READY小部件视图”。
这里描述了类似的东西: http://en.wikipedia.org/wiki/Presentation-abstraction-control
优点:
答案 3 :(得分:0)
如果您担心应用程序的速度性能,并且希望使其更直接,我会说您允许视图从模型中读取数据(只读)。当控制器和视图必须同步时,它会更复杂。视图需要的数据和控制器应提供给视图的数据。当视图可以直接访问模型时,您无需验证控制器是否提供此数据。
关于MVC概念基于松散耦合的论点,没有矛盾,因为Model仍然是独立的,不依赖于视图或控制器。控制器和视图之间的区别在于控制器可以推送到(从)模型,而视图只能从模型中提取。