PureMVC和Lua结合整理

本文介绍了PureMVC在MVC模式上的改进,通过结合多种设计模式降低耦合性,提高灵活性。重点探讨了PureMVC中的Singleton、Facade、Observer模式以及Mediator和Command的角色。同时,文中分享了实际项目中PureMVC的运用,包括单模块和多模块通信,并提出了针对过于强调解耦导致的问题进行的优化策略。
摘要由CSDN通过智能技术生成

参考 https://blog.csdn.net/wangjiangrong/article/details/107686954
https://www.cnblogs.com/skynet/archive/2013/03/14/2958644.html
https://blog.csdn.net/qq_29579137/article/details/73692842

挪用了其他文章中的一些流程图

前言

最近负责项目UI框架部分的搭建,查阅了一些资料以后,借鉴了其他项目的一些想法,在这边整理一下,项目UI部分是用Lua写的,贴的相关代码也是Lua代码,由于是边学习边写的,命名规则是按项目标准命名的(成员变量前加m等)

MVC和PureMVC

目标:将数据(Model),视图组件(View)和控制逻辑(Control)进行分离。让程序便于修改,更具有扩展性,灵活性,可重用性。高内聚,低耦合,一直是追求的目标。传统经典的MVC模型虽然将数据,视图组件和控制逻辑进行了分离,但耦合性还是比较高。

PureMVC在MVC基础上做了许多的改进,通过结合多个设计模式的应用,让耦合性变得更低,也变得更加的易用,在扩展性,灵活性,重用性方面也做得更好

设计模式

单例模式 (Singleton)

在PureMVC中,Model,View,Controller是三个单例模式类,三者合称为核心层,实际上是Manager管理类,分别定义了字典用于保存引用

外观模式(Facade)

在开发的过程中,需要在Contoller中,获取View以及Model的对象,修改Mode,更新View,或是在View,需要获取Model,进行一些初始化或是修改的操作,在业务逻辑很多的情况下,Model, View, Controller之间的频繁的调用就会非常多,耦合性会变高,在PureMVC中,为Model、View、Controller类提供了外观类Façade,主要负责访问和通知 Model、View 和 Controller,即管理这三者。Façade统一对外提供这3者的接口,使用过程成只需要跟Façade打交道就行

观察者模式(Observer)

为了彻底解耦,避免直接的函数调用,PureMVC使用观察者模式(又称发布/订阅模式)的形式传递消息。在PureMVC中Mediator、Proxy、Command之间的通信,以通知形式实现松散耦合。Mediator、Proxy、Command都是通知者(发布者) 可以调用sendNotification发送消息;Mediator、Command同时也是观察者(订阅者)可以接收来自其它对象的通知。

这里先不用关心Mediator、Proxy、Command是什么,需要注意的是Mediator和Command既是通知者也是观察者,Proxy只是通知者
Proxy=>Model ,Mediator=>View , Command=>Controller

所有的通知者(发布者)都继承自Notifier类,故拥有发布通知的功能,而Notifier是使用Façade发布通知的
由外观模式可知façade保存了View的引用,View在观察者模式中充当着管理者的角色,保存着所有消息/主题、观察者的映射。当Mediator/Command/Proxy发布通知时,façade调用View的notifyObservers()方法,遍历保存的映射关系,从而通知所有满足条件的观察者

function Notifier:SendNotification(notificationName, body, type)
    local facade = self:GetFacade()
    if facade ~= nil then
        facade:SendNotification(notificationName, body, type)
    end
end
function Facade:SendNotification(notificationName, body, type)
    self:NotifyObservers(Notification.New(notificationName, body, type))
end
function Facade:NotifyObservers(notification)
    if self.mView ~= nil then
        self.mView:NotifyObservers(notification
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值