深入解析MVC模式及其衍生模式
1. MVC模式的局限性
MVC模式的出现明确了应用程序设计应遵循关注点分离(SoC)原则,SoC虽早已为人所知,但MVC将其付诸实践。然而,MVC并非完美无缺。
经典MVC存在两大弊端:
- 状态通信问题 :模型需要向视图传达状态变化,通常通过观察者关系实现。
- 视图对模型的依赖 :视图对模型有深入了解,当模型发生变化时,视图会收到通知并刷新。
1.1 可测试性不足
在MVC中,控制器是一个独立的类,通过方法签名获取输入并将返回值传递给模型,整体上是可测试的。可以创建其实例,使用模拟值调用方法,并检查方法的返回值或模型对象的修改状态。
模型除了与视图的观察者关系外,几乎没有其他逻辑。而视图呢?它并非完全被动和简单,至少需要包含从模型中检索变化的逻辑。视图从模型中读取所需信息并通过UI元素显示,但没有明确的契约规定视图具体需要哪些数据。因此,视图需要有自己的逻辑来从大型模型中选择数据并将其转换为UI元素,这些代码很难从视图中分离出来,导致视图不够被动,并且在一定程度上依赖于底层平台或UI工具包,从而阻碍了可测试性。
1.2 设计不够简洁
MVC的核心问题是视图和模型之间建立了双向连接,即视图了解模型,模型也了解视图。这种双向连接是因为控制器对数据流的控制能力不足。在MVC中,控制器是用户和应用程序之间的中介,如果它能成为视图和模型之间的中介,其作用会更有效。通过让控制器从视图获取输入并将值返回给视图,可以分离视图和模型,减少连接箭头的数量。
下图
超级会员免费看
订阅专栏 解锁全文
1217

被折叠的 条评论
为什么被折叠?



