结构演化小结
架构演化顺序复盘
对象之间的交互
首先按照一次性项目的方法快速完成了《点点点》项目的制作。
分析了《点点点》项目后发现有三个问题,总体来说其实是一个问题:
- 对象之间的引用无规则
针对这一点,我们先使用树结构来整理了一下场景结构(UI、Game),然后引入了对象之间的交互这个概念。
对象之间的交互有三种,分别是:
- 方法
- 委托
- 事件
然后也简单说了下模块化的三种常规方式
- 单例
- IOC
- 分层
接着,我们通过对象之间的三种交互方式,逐个修复了《点点点》遇到的问题。
最后总结得出
- 自底向上用事件或者委托
- 自顶向下用方法
在这个过程中,我们积累了一个工具类,即:Event基类。
再接着,我们学习了一些理论,包括:
- 表现和数据要分离
- 交互逻辑与表现逻辑
然后分别开始对《点点点》以及《CounterApp》的表现逻辑和交互逻辑进行优化。
表现逻辑优化时引入了一个工具类BindableProperty,它是数据+事件的组合。
交互逻辑优化时引入了Command模式,它是大部分MVC框架的选择。
Command是对象之间交互的第四种方式,不过它适用于交互逻辑。
到此,对象之间的交互这个话题就结束了,加下来开始介绍模块化了。
模块化
最开始能够模块化的对象是我们两个项目中的Model对象。
因为Model对象是需要再多个表现对象之间共享。
而最初Model对象是用静态类实现的,后来我们引入了单例,单例比静态类好一点就是其声明周期相对可控,而且访问单例对象比访问静态类多了一点限制,也就是需要Instance的获取。
模块化方面和对象之间的交互方面要考虑的问题是差不多的,模块化方面,就是访问模块对象的方式是不能无任何规则和限制的。
所以针对这一个问题,引入了限制性较强的IOC容器。
引入IOC容器后,我们可以通过模块接口去访问模块对象,在设计模块的时候,可以先设计接口,再设计模块对象。
分层
但是IOC容器在使用的时候,本质上和静态类和单例是一样的,所以这里我们引入了层级这个概念,逐步把整个项目分成了IController、
ISystem、IModel、IUtility四个层级,并且实现了Architecture
基类。
期间我们接触了接口阉割技术,在之后我们通过接口阉割技术和静态拓展方法,为每一个层级都增加了限制。
最后我们又引入了TypeEventSystem,并且也为它增加了使用规则,用来作为架构中主要的事件系统。
Controller层(表现层):获取System,Model、监听事件、发送Command(BelongToArchitecture)
Command(中介):获取Utility,Model,System、发送事件、发送Command(BelongToArchitecture , CanSetArchitecture)
System层:获取Model,Utility,System、监听事件、发送事件(BelongToArchitecture , CanSetArchitecture)
Model层:获取Utility、发送事件(BelongToArchitecture , CanSetArchitecture)
Utility层:无