【发布时间】:2015-12-12 08:59:51
【问题描述】:
关于模型-视图-控制器 (MVC) 的文献通常指出模型和视图是相互独立的实体,而控制器调节它们的交互,因此强烈依赖于两者。
在理论上,最后一条语句似乎是一种加强模块化的合理方法。
但是假设您编写了一个允许用户创建、编辑和保存文档的应用程序。这些文档比简单的文本文档更复杂,由多个字段组成,并非所有字段都属于同一类型。然后你会想到,为了多态地支持同一个文档的多个可视化表示,你可以定义一个 DocumentView 接口,任何具体的视图子类都可以采用它来指示它能够显示一个文档。
现在,假设您已经编写了采用 DocumentView 接口的 SomeDocumentView 类。要创建文档视图,您的应用程序代码将具有类似于以下的一行:
DocumentView documentView = SomeDocumentView(document)
现在假设将来你已经编写了UpdatedDocumentView 类,它也采用了DocumentView 接口。要进行更改,您只需将上面的行替换为:
DocumentView documentView = UpdatedDocumentView(document)
瞧!您的应用程序代码通过 DocumentView 接口自动支持您的 UpdatedDocumentView。
但是这样的设计是否违反了 MVC,因为视图的实现现在显式地依赖于模型?为什么这一定是坏事?如果您的模型在未来发生变化,无论您采用何种方法,您都必须更改代码。
【问题讨论】:
标签: ios model-view-controller application-design