快速上手并深入理解PureMVC框架设计(C#)

直接进入正题谈谈框架之间是如何解耦吧...

首先我们先分析下辅助工具类Observer类

可以看到在构造观察者时 传入了对象和对象包含的方法(蓝色箭头为对象,红色箭头为对象内包含的方法)

接下来我们查看观察者的执行(NotifyObserver)

参数是框架给我们提供的标准(Inotification接口 通知名称(name),通知的执行对象(body))

在执行观察者的时候 反射出执行对象的方法 然后调用方法

同时PureMVC中已经为我们统一化了发送标准和消息体标准(Notifier,Notification)

发送者(Notifier)中包含了外观模式的单例引用(Facade)  然后中介者(Mediator),代理者(Proxy) 和 命令(Command)中统一继承发送者即可全部实现发送消息的标准

↑词条信息很重要

再来看看Facade

可以看到Facade持有对其他三个层中单例的引用  同时Facade本身以单例的形式存在

接下来 我们进入Facade主要功能看看有哪些

可以看到此时Facade囊括了MVC三层能做到的所有功能

接下来 我们尝试解读在这种外观模式的封装后如何使用(边看边分析)

我们在一个Facade的子类中进行了 命令的注册 中介者的注册 以及代理者的注册

在我们完成每一次注册之后 PureMVC框架为我们做了哪些操作?

首先是注册命令 我们可以看到Facade在使用控制器进行命令注册

然后

注意 上文中讲到的Observer 此时发挥作用 可以看到在注册命令的时候 我们将此条命令推送给了视图层的观察者集合

一个事件(notificationName)此时对应了一个观察列表 也就是说这种设计再次对方法进行了解耦和  *******重点*******

通过控制层把消息推送给了视图层  而视图层又将消息添加到了观察者集合中

此时我们的注册命令阶段结束

接下来看看注册中介时 框架为我们做了哪些操作

首先进入Facade注册中介者

进入视图层 接下来分析四个箭头的意义

首先是蓝色箭头 可以看到在注册中介者时调用了ListNotificationInterests方法拿到一个字符串集合

这里也就是说 你的XX中介者类中一定会存在这么一个名为IList<string> ListNotificationInterests();的方法 **********重点***********

接着框架为我们构造了一个观察者对象 并且我们注册的中介者现在是一个方法的执行者 执行的方法名称" handleNotification"(红色箭头指向的)

也就是说框架规定了我们在写XXX中介者类时必须包含一个名为"handleNotification"的方法

同时这个观察对象被关联到了很多个观察事件中

上文已经做出分析 观察者通过对象的反射执行对象的方法

那么现在这个观察者对这堆事件都做出了不同的处理

这就达到了中介者设计模式的初衷! 让网状结构转化为星状结构

这样的话我们一个方法就要处理很多不用的事件 也就是把网状结构的耦合度向星状图的原点输送

方法中处理起来的话  必然是判断了 (switch 或者if)

这样的话我们必须先表明事件添加到List中

此时完成注册 我们注册时 框架提供观察者记录了我们中介者事件中所有的事件

ps:紫色箭头这种东西有很多  比如我们 注册中介 命令 模型 的Register和Remove 还有modle层 view层 controll的Initialize方法

   这个主要作用是做一些额外的操作  比如说 有的视图层在做视图操作或注册命令时会有UI表现有的又没有

   此时通过这种方法解耦 让你很舒服的处理这种情况

  

接下来我们可以看到代理者的注册

进入模型层 可以代理注册很简单 就是把数据塞入字典

那么做完了三个层的注册 操作  接下来分析 在触发事件之后框架又为我们做了哪些操作

举个例子 在注册中介者的时候 我们在中介者的构造阶段给一个按钮绑定一个事件 然后尝试去触发他

在上面已经总结了 我们的三大类 中介 命令 代理 都被框架统一化了发送通知的标准(继承Notifier 使用其中SendNotification方法)

所以每个功能 触发命令的时候 直接调用SendNotification方法  接下来 我们查看触发方法之后 框架又做了哪些操作

进入外观模式单例

此时进入了视图层的方法处理模块 我们进入这个模块对其功能进行分析

可以看到方法中先获取一个事件对应的几个观察者 然后对其执行(上文中提到的 观察者持有观察对象和对象内的方法  通过反射进行方法执行)

Ok 此时框架全自动执行了 观察中心的方法

接下来总结一下此间几种模式的作用

外观模式:就如项目中所见 对几个层进行封装目的在于让使用者觉得边界  这一点SendNotification方法效果最为显著

命令模式:对方法进行解耦 让方法变得无限单一

观察者:是一所有事件的处理中枢

中介者:将一个系统的耦合度转化到一个点上

代理模式:主要是统一对数据的处理标准  对数据和数据的处理方法解耦和

单例:不说了

凌晨五点了 即兴写了个框架解读 此时脑袋里一团浆糊  文中可能有很多误人子弟的错误也请大神们多多指点

自己认真的读了这套框架用了两天 第一天和以前接触过这种一样读着读着太零散整合不起来就放弃了

然后第二天尝试了从运行逻辑的角度来解读 效果比之前的好很多 直接入门了

原文地址:https://www.cnblogs.com/chenggg/p/10743739.html

时间: 2024-08-30 09:17:13

快速上手并深入理解PureMVC框架设计(C#)的相关文章

快速上手公司开发使用的框架——思路总结

第一步:浏览需求说明文档.了解软件解决什么问题,什么需求 第二步:导入项目,找jar包,浏览它的核心框架,核心技术 第三步:画图,画系统架构的草图,这个系统是如何搭建的,每个层都用到了那些技术,记录自己不熟悉的技术点 第四步:系统都是分层体系,都从后往前面开始阅读源码: 1.  看数据库配置文件,了解系统连接的数据库,账号,密码 2.  持久层 3.  Dao 4.  Service 5.  Controller/action 6.  Jsp 找权限管理部门表,一般都是单表的CRUD操作 找到模

轻量级MVVM框架Vue.js快速上手(MVVM、SEO单页面应用)

轻量级MVVM框架Vue.js快速上手(MVVM.SEO单页面应用.×××服务器端渲染.Nuxt.js) 网盘地址:https://pan.baidu.com/s/1LkhepNpGAtRjrxp_CVJNIg 密码: d483备用地址(腾讯微云):https://share.weiyun.com/5tTLqQk 密码:pxezuj Vue.js是一套构建用户界面的轻量级MVVM框架,与其他重量级框架不同的是, Vue.js 的核心库只关注视图层,并且非常容易学习,很容易与其它前端技术或已有的项

python爬虫框架之scrapy的快速上手 二

scrapy快速上手之crawl模板 前面提到过,我们使用了basic作为模板生成了爬虫 现在介绍另外一种模板:crawl 创建项目 首先在命令行界面执行: scrapy startproject Spider 后,即可得到提示 You can start your first spider with: cd Spider scrapy genspider example example.com 然后,根据提示在命令继续输入cd Spider 这样,我们就来到了所创建爬虫的工作目录下 前面已经介

【总结】学习AWS的VPC并通过快速上手实验室动手实操

讲师:黄涛 高级技术讲师 1.邱洋的理解 AWS的服务类型包括 计算.存储内容分发.联网.数据库等10多大类,几十项服务 但是跟网络相关只有2个(VPC和数据中心光纤连接) AWS的VPC是云计算中网络运维的基石,是SDN能力的体现 VPC是一整套模拟传统网络运维的工具,包括: 子网 DHCP 防火墙(安全组) 路由表(NACL) DNS 网关 VPN等众多功能 AWS的快速上手实验室,模式值得学习,包括: 实验概述说明 实验具体操作步骤文档(如按照服务的生命周期维度进行设计:创建.修改.删除1

EF Core 快速上手——EF Core 入门

EF Core 快速上手--EF Core 介绍 本章导航 从本书你能学到什么 对EF6.x 程序员的一些话 EF Core 概述 1.3.1 ORM框架的缺点 第一个EF Core应用 ??本文是对<Entity framework in action>部分章节的翻译,某些场景也会附上笔者实践的Demo.尽管很认真的斟酌,但是水平有限,还请各位批评和斧正. ??Entity Framework Core, 或者 EF Core,是一个方便软件工程师访问数据库的库.有很多方法来构建这样的一个库

Masonry介绍与使用实践:快速上手Autolayout

以上是纯手写代码所经历的关于页面布局的三个时期 在iphone1-iphone3gs时代 window的size固定为(320,480) 我们只需要简单计算一下相对位置就好了 在iphone4-iphone4s时代 苹果推出了retina屏 但是给了码农们非常大的福利:window的size不变 在iphone5-iphone5s时代 window的size变了(320,568) 这时autoresizingMask派上了用场(为啥这时候不用Autolayout? 因为还要支持ios5呗) 简单

【图文详解】scrapy安装与真的快速上手——爬取豆瓣9分榜单

写在开头 现在scrapy的安装教程都明显过时了,随便一搜都是要你安装一大堆的依赖,什么装python(如果别人连python都没装,为什么要学scrapy-.)wisted, zope interface,pywin32---现在scrapy的安装真的很简单的好不好! 代码我放github上了,可以参考: https://github.com/hk029/doubanbook 为什么要用scrapy 我之前讲过了requests,也用它做了点东西,([图文详解]python爬虫实战--5分钟做

快速上手之 MVC入门实例

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑.MVC被独特的发展起来用于映射传统的输入.处理和输出功能在一个逻辑的图形化用户界面的结构中. 快速上手.今天我们来从无到有创建mvc项目,介绍一下相关的知识点.咱们开门见山.我做的简单的demo 是最基本

《开源框架那些事儿22》:UI框架设计实战

UI是User Interface的缩写,通常被认为是MVC中View的部分,作用是提供跟人机交互的可视化操作界面.MVC中Model提供内容给UI进行渲染,用户通过UI框架产生响应,一般而言会由控制层调用业务逻辑进行处理,并把处理结果以Model方式返回View,再次渲染.UI框架的大致过程就是如此,按实现方式可以分为RIA和瘦客户端方式,目前基于B/S的瘦客户端方式比较流行.UI框架套路上很简单,但是想要做好可就不容易了.目前基于MVC的框架灿若繁星,不客气的说是个软件公司就有自己的技术框架