mvc参数传值 应用面向对象编程SoC原则的典型示例(11)

电脑杂谈  发布时间:2018-02-05 18:03:21  来源:网络整理

3. MVC 应用

在 MVC 模式中,其核心是视图接收来自模型和控制器的数据并决定如何显示,控制器捕捉用户的输入事件和系统产生的事件。当控制器检测到有键按下时,它将外部的事件转换为内部的数据请求,控制器决定调用模型的那个函数进行处理,然后确定用那个视图来显示模型提供的数据,详见程序清单 9.77。

程序清单 9.77 MVC 模式应用范例程序(main.c)

至此,实现了具有 LED 和 zigbee 两个视图的 MVC 应用程序,为了验证 zigbee 视图,实现远程“监控”,需要使用另外一个 zigbee 来接收 MVC 应用中 zigbee 视图发出的数据“0”或“1”。为便于观察,使用另外一块 AM824ZB 开发板来接收数据,当接收到“0”时,其LED0 熄灭,当接收到“1”时,其 LED0 点亮,范例程序详见程序清单 9.78。

程序清单 9.78 新增 AM84ZB 板用以接收 zigbee 数据的范例程序

在 MVC 应用中,zigbee 视图将 zigbee 的本地地址设置为 0x2001,目标地址设置为0x2002,。新的 AM824ZB 开发板为了能够接收到其发出的数据,需要对应的将本地地址设置为 0x2002,目标地址设置为 0x2001。

实际上,MVC 模式常用于处理 GUI 窗口事件,比如,每个窗口部件都是 GUI 相关事件的发布者,其它对象可以订阅所关注的事件。比如,当按下 A 按钮时,会发布相应的“动作事件”。另一个对象对这个按钮进行注册,便于在此按钮按下时,得到相应的消息,然后完成某一动作。

由此可见,观察者模式背后的思想等同于关注点分离原则背后的思想,其目的是降低发布者和订阅者之间的耦合,便于在运行时动态地添加和删除订阅者。模式在抽象的原则和具体的实践之间架起了一座桥梁,其主要动机是将变化带来的影响局部化。

局部化影响的必然结果就是“捆绑逻辑和数据”,如果有可能尽量将其放在一个方法中,至少要放在一个对象里,最起码也要放到一个包下面。在发生变化时,逻辑和数据很可能会同时被改动。如果将它们放在一起,那么修改它们所造成的的影响停留在局部。

其次,观察者模式的最大推动力来自于 OCP 开放闭合原则,其动机就是为了在增加新的观察者对象时,无需更改观察对象,从而使观察对象保持封闭,这对于系统的扩展性和灵活性有很大的提高。显然由继承实现的 OCP,使设计模式成为应变能力更强的工具。

>>> 9.3.6 MVC 应用程序优化

在整个布尔模型的应用中,使用的硬件外设资源有 1 个按键、1 个 LED 和 zigbee 模块,这些资源都有相应的可以跨平台的通用接口。虽然程序清单 9.77 中绝大部分程序都没有与硬件绑定,可以跨平台复用,但是唯一的不足之处在于在应用程序中调用了实例初始化函数am_zm516x_inst_init(),而实例初始化函数是与平台相关的,不同平台可能不同,因此若实例初始化函数修改,则应用程序必须进行对应的修改。

显然,实例初始化函数是初始化具体实例的,而应用程序并不关心具体实例,其只需要使用具体实例提供的通用服务(如 LED、zigbee、KEY)。基于此,将实例初始化函数的调用从应用程序中“分离”出去,应用程序全部使用通用接口实现。使用 LED,需要 LED 对应的 ID 号,使用按键,需要按键对应的编码,使用 zigbee,需要 zigbee 的操作句柄,这些信息都可以通过参数传递。优化后的应用程序范例详见程序清单 9.79。


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-65228-11.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...