前言:为了防止累成狗或者变成狗,我们要加倍努力,早日成为大佬咸鱼翻身~~~
上一次笔者写过一篇Unity 之 经典优秀框架 PureMVC (4.1.0版本)解析 (上) 应用篇,这边是对框架内部实现的解析。
- Unity版本 2018.3.11
- PureMVC版本 4.1.0
MVC架构模式无非两个优点:
- 第一:视图、业务逻辑、数据的分离
- 第二:就是他的消息传递机制了。
UI视图、业务逻辑、数据的分离是达到高内聚,低耦合的设计需求,逻辑上更清晰,也利于后续的扩展维护。而MVC得消息传递机制,更是达到了进一步的解耦
本次使用的PureMVC也是基于MVC的扩展升级
PureMVC涉及的设计模式颇多,但都不复杂,下面笔者进行逐一剥离讲解
最小单元组合:货物(消息体Notification )与 快递盒(Observer)
先从消息传递机制讲解,这也是PureMVC中设计巧妙也很实用的地方,通俗的讲,就是向一个列表中添加一些指定字符串,当别人或自己发送已经在列表中的字符串时,就会触发指定的函数。但让消息系统运转起来,需要三要素,每种要素有细分2点(大同小异)
-
注册消息
- 注册视图消息
- 注册命令消息
-
发送消息
- 发送视图消息
- 发送命令消息
-
执行消息
- 执行视图消息
- 执行命令消息
消息传递机制的最小单元就是消息体
Notification
根据应用篇我们知道,在发送消息通知的时候我们要传递三个参数,消息名称、消息所带数据、消息类别(如下)public virtual void SendNotification(string notificationName, object body = null, string type = null)
而消息体Notification正是这三个参数的包装集合
using PureMVC.Interfaces;
namespace PureMVC.Patterns.Observer
{
/// <summary>
/// 消息体具体实现接口
/// </summary>
public class Notification: INotification
{
/// <summary>
/// 初始化通知消息
/// </summary>
/// <param name="name">消息名称</param>
/// <param name="body">消息所带的数据</param>
/// <param name="type">消息的类型</param>
public Notification(string name, object body = null, string type = null)
{
Name = name;
Body = body;
Type = type;
}
public override string ToString()
{
string msg = "Notification Name: " + Name;
msg += "\nBody:" + ((Body == null) ? "null" : Body.ToString());
msg += "\nType:" + ((Type == null) ? "null" : Type);
return msg;
}
/// <summary>
/// 消息名称
/// </summary>
public string Name { get; }
/// <summary>
/// 消息所带的数据
/// </summary>
public object Body { get; set; }
/// <summary>
/// 消息的类型
/// </summary>
public string Type { get; set; }
}
}
经过实例化消息体,消息名称、消息所带数据、消息类别已经分别赋值,那一步就是如果传递这个消息体了,但是在传递之前我们要先把这个“货物”包装一下,这个包装盒就是Observer