前言:当编写系统模块时,都会注意高内聚、低耦合、单一等等原则,虽然这些原则并非强制性,但是它对后续扩展有很好的指导性建议。但这些仅仅是微观上的,在宏观上也是需要类似这种指导性建议。这也是我们需要对架构或者框架进行分层的原因。
什么是分层
分层就是就是在宏观上,将系统整体拆分成几大类别,对其职责进行归纳总结,并控制其之间的相互关系。
分层的作用
分层解决的是系统之间的依赖关系,并确定其根本职责或者说是功能范畴,对于系统的后续的扩展和健壮性都有极大的帮助。而且因为分层策略上的束缚,在模块编写时,也约束了某些不确定因素扩散到整个系统的情况,这也算是变相的保底机制。
应该怎么分
目前常规使用的分层策略分为三种
DDD为首的N层应用架构
同心圆方式的圆葱架构
六边形架构
作为游戏开发,其分层策略更趋近于,分层和同心圆架构。
在说明前,先介绍一些概念:“上层与下层”、“低层与高层”、“外层与内层”,其权重或者说等级关系为:上层==低层==外层,下层==高层==内层。
为了后续的方便说明,我们以上层和下层进行说明。
游戏开发的系统,按照其宏观的功能职责会分为,引擎,插件,自定义管理类(各种Manager),工具类,业务逻辑(MVP/MVC/MVVM)、SDK这6大类
其依赖方向为上层依赖下层且为单向,在使用时,并非使用严格分层架构,而是使用松散分层架构。也就是说,上层可以直接使用其下面的所有层级,并非仅仅下面的一层。
其结构越往下,抽象度越高,通用性就越强,修改频率也越低。在CustomManager层与Plugins、SDK层之间,有时需要添加中间层,进行依赖倒置,来达到替换Plugins、SDK的目的。
通俗来讲,在下层的层级中,不应该出现上层的任何代码(类、变量、函数)。
只有这样严格的控制其层级,才能最大几率的避免网状结构的存在,在替换对应层级的时候也可减小和准确评估出其受影响范围。
总结
分层策略本质是约束和控制,这种约束和控制以牺牲一定自由度为前提,带来了利于风险管控、支持并行开发、无感知替换等优点。所以分层策略需要在开发之初进行制定,但架构的优化是一个循环往复的过程,直到找到最合适的策略。