《U3D高级编程》- 软件架构
软件架构
架构的意义
怎样才算是优秀的软件架构?
分层是我们应对和管理复杂性的基本思维武器。
面对一个复杂的系统,我们一开始总是无从下手,就好比一下子在我们面前摆了很多的问题,杂乱无章。这很大程度上会导致我们慌张、焦急、惶恐。分层思维,能很好地帮助我们抽象一个复杂系统的架构层次,从而清晰地描述有多少层面的事务需要我们解决,以及解决层级的先后次序。
构建一套复杂系统时,我们把整个系统划分成若干个层次,每一层专注解决某个领域的问题,并向上提供服务。这样的抽象做法,让复杂的事务变得更加清晰、有序。有些层次并不一定是横向的,也可以是纵向的,纵向的层次贯穿其他横向层次,称为共享层,如图所示。
- 2.分治思维
分而治之也是应对和管理复杂性的一般性方法,下图展示的是一个分治的思维流程。
对于一个无法一次解决的大问题,我们先把大问题分解成若干个子问题,如果子问题还无法解决,则继续分解成子子问题,直到可以直接解决为止,这就是分解(divide) 的过程;然后将子子问题的解组合成子问题的解,再将子问题的解组合成原问题的解,这就是组合 (combine) 的过程。
在生活中分治思维可解决大问题、复杂问题。特别是当你遇到那些从未处理过的问题,或者特别复杂以至于超出你能力范围的问题时,把它进行分解、拆分、解剖、撕裂。把大问题先分成几大块的问题,再从这几大块问题入手,对每个大块问题再分解,拆分成小块问题。倘若小块问题仍然无法解决,或者还是没有思路,则再拆分,再解剖,再分解,直到分解到你能开始着手解决为止。这样一步步、一点点,把小问题解决了,就是把大问题解决了。随着时间的推移,不断解决细分的小问题,大问题便可迎刃而解。
- 3.演化思维
经常有人讨论:架构是设计出来的还是演化出来的? 基于多年的经验,我认为架构既是设计出来的同时也是演化出来的。对于互联网系统,基本上可以说是三分设计,七分演化,既在设计中演化,又在演化中设计,是一个不断迭代的过程。
在互联网软件系统的整个生命周期中,前期的设计和开发大致占三分,在后面的七分时间里,架构师需要根据用户的反馈对架构进行不断的调整。我认为,架构师除了要利用自身的架构设计能力外,也要学会借助用户的反馈和进化的力量,推动架构的持续演进,这就是演化式架构思维。
如何构建Unity3D项目
试着构建Unity3D项目
下面采用分层的思维方式先确定架构的层级,如图所示。
把整个项目分成五大层级,即网络层、数据管理层、资源管理层、核心逻辑框架层、UI框架层。
这样一分就清晰地知道了我们需要做哪几大类的东西。只是这样拆分太笼统,特别是核心逻辑框架层,完全是概括性的层级,无法表达具体的系统。所以我们要再次拆分层级,把太过于笼统的层级进行分层,如图所示。
经过分层后再采用分治的方法,把核心逻辑框架层拆成为工具编辑器、角色行为框架、AI框架、地图场景与寻路框架、着色器与特效、设备平台等。这些子层都在核心逻辑框架层中,它们有自己的框架,也可以互相调用,它们一起构成核心逻辑部分,也就是核心玩法或核心战斗的主要部分。