查看: 1086|回复: 0
打印 上一主题 下一主题

[经验分享] MVC是一种用于表示层设计的复合设计模式

[复制链接]

100

主题

3

听众

7683

积分

高级设计师

Rank: 6Rank: 6

纳金币
2378
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

跳转到指定楼层
楼主
发表于 2015-2-11 21:20:24 |只看该作者 |倒序浏览

MVC是一种用于表示层设计的复合设计模式。M、V、C分别表示模型(Model)、View(视图)、Controller(控制器)。它们的职责如下:

它们之间的交互有以下几种:
        1.当用户在视图上做任何需要调用模型的操作时,它的请求将被控制器截获。
        2.控制器按照自身指定的策略,将用户行为翻译成模型操作,调用模型相应逻辑实现。
        3.控制器可能会在接到视图操作时,指定视图做某些改变。
        4.当模型的状态发生改变时,将通过某种方式通知视图。
        5.视图可以从模型获取状态,从而改变自己的显示。
我要引入一个设计模式,叫 观察着(Observer)模式。

在MVC中,视图是观察者,模型是被观察者,当模型状态改变时,调用所有观察者的Update方法,通知视图模型有变,视图在Update方法里写下响应代码,完成操作。通过这个方法,视图和模型就可以在仅依赖接口的情形下进行交互, 而不必强耦合 ,而且在模型不变的情况下,视图可以随意替换。(只要实现了IObserver)

2. 在MVC中另一个使用接口的地方就是控制器,这里我要首先引入一个设计模式:策略模式( Strategy)。在MVC中,控制器就使用了这个模式。
刚才我说过,视图负责与用户交互,但是,它只负责界面显示部分,至于当用户做了某个操作(如单击某个按钮)后系统应该怎么反应,视图并不负责,它只是将这个动作交给控制器,控制器根据内置的策略,将用户操作翻译成模型的逻辑。这就是说,同一个视图、同一种操作,模型可以做出不同的反应,这取决与控制器的内置策略。所以,我们的系统中可以有很多控制器,它们有不同的策略,当视图希望改变策略时,它可以更换控制器。怎么实现呢?这就需要视图不能和具体控制器耦合,而是要仅依赖一个控制器接口(如IController),并聚合一个IController的实例。当希望更改策略时,可以在系统运行时动态更换Controller,这就是策略模式的实现。


分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2025-7-28 02:05 , Processed in 0.063220 second(s), 27 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部