OGeek|极客世界-中国程序员成长平台

标题: ios - 在 Model-View-Controller 中, View 依赖于模型是否可以? [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-13 10:55
标题: ios - 在 Model-View-Controller 中, View 依赖于模型是否可以?

关于模型- View - Controller (MVC) 的文献通常指出模型和 View 是相互独立的实体,而 Controller 调节它们的交互,因此强烈依赖于两者。

在理论上,最后一条语句似乎是一种加强模块化的合理方法。

但是假设您编写了一个允许用户创建、编辑和保存文档的应用程序。这些文档比简单的文本文档更复杂,由多个字段组成,并非所有字段都属于同一类型。然后你会想到,为了多态地支持同一个文档的多个可视化表示,你可以定义一个 DocumentView 接口(interface),任何具体的 View 子类都可以采用它来指示它能够显示一个文档。

现在,假设您已经编写了采用 DocumentView 接口(interface)的 SomeDocumentView 类。要创建文档 View ,您的应用程序代码将具有类似于以下的一行:

DocumentView documentView = SomeDocumentView(document)

现在假设将来你已经编写了UpdatedDocumentView 类,它也采用了DocumentView 接口(interface)。要进行更改,您只需将上面的行替换为:

DocumentView documentView = UpdatedDocumentView(document)

瞧!您的应用程序代码通过 DocumentView 接口(interface)自动支持您的 UpdatedDocumentView。

但是这样的设计是否违反了 MVC,因为 View 的实现现在显式地依赖于模型?为什么这一定是坏事?如果您的模型在未来发生变化,无论您采用何种方法,您都必须更改代码。



Best Answer-推荐答案


“ Model View Controller ”在不同的时间有不同的含义。在最初的 MVC 中,在 Smalltalk 中, Controller 表示用户输入,是的, View 采用模型对象并直接表示它们。

Apple's MVC更像是 MVP 的别名正如您所说,演示者/ Controller 充当模型和 View 之间的中间人。

这种模式允许独立开发 View 。可能在您的 DocuentView 的情况下,它实际上是几个其他 View 的组合和 Controller ,从而模糊了 View 和 Controller 之间的区别。

UIViewController 被称为这样的原因之一是因为它处理许多 View 职责,即用户输入手势。不过,在现代代码中使用这些功能通常是不受欢迎的。 Apple 现在提供了更多的离散机制。

关于ios - 在 Model-View-Controller 中, View 依赖于模型是否可以?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32597330/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://jike.in/) Powered by Discuz! X3.4