10、深入解析MVC模式及其衍生模式

深入解析MVC模式及其衍生模式

1. MVC模式的局限性

MVC模式的出现明确了应用程序设计应遵循关注点分离(SoC)原则,SoC虽早已为人所知,但MVC将其付诸实践。然而,MVC并非完美无缺。

经典MVC存在两大弊端:
- 状态通信问题 :模型需要向视图传达状态变化,通常通过观察者关系实现。
- 视图对模型的依赖 :视图对模型有深入了解,当模型发生变化时,视图会收到通知并刷新。

1.1 可测试性不足

在MVC中,控制器是一个独立的类,通过方法签名获取输入并将返回值传递给模型,整体上是可测试的。可以创建其实例,使用模拟值调用方法,并检查方法的返回值或模型对象的修改状态。

模型除了与视图的观察者关系外,几乎没有其他逻辑。而视图呢?它并非完全被动和简单,至少需要包含从模型中检索变化的逻辑。视图从模型中读取所需信息并通过UI元素显示,但没有明确的契约规定视图具体需要哪些数据。因此,视图需要有自己的逻辑来从大型模型中选择数据并将其转换为UI元素,这些代码很难从视图中分离出来,导致视图不够被动,并且在一定程度上依赖于底层平台或UI工具包,从而阻碍了可测试性。

1.2 设计不够简洁

MVC的核心问题是视图和模型之间建立了双向连接,即视图了解模型,模型也了解视图。这种双向连接是因为控制器对数据流的控制能力不足。在MVC中,控制器是用户和应用程序之间的中介,如果它能成为视图和模型之间的中介,其作用会更有效。通过让控制器从视图获取输入并将值返回给视图,可以分离视图和模型,减少连接箭头的数量。

下图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值