# 《Unity3D 高级编程:主程手记》阅读笔记


# 软件结构

# 软件架构的意义

# 承载力

​ 软件架构承载力的评定标准:软件架构的意义来说,一个架构能够承受多少个系统,承受足够多的代码行数后能够有序且规范运行,程序员彼此的工作是我耦合度是否依然能够保持原设计要求,能够承受多少个程序员共同开发和共同开发的效率如何。

​ 软件架构的承载力的体现:从软件架构的目标上来说,对于服务器来说,当前架构能够承受多少人同时访问,能够承受的日均访问量是多少。对于客户端来说,能够显示多少 UI 元素,可以访问多少模型(包括同屏渲染和非同屏渲染)。

# 可拓展性

​ 架构能够适应不同类型的需求,可添加不同类型的系统、不同功能的子系统。

​ 可拓展性的关键字在于,是否能够在添加新的子系统后不影响或者尽可能少影响其他子系统的运作。

# 易用性

​ 易用性决定了架构的整体开发效率,程序员容易上手,子系统容易对接。各模块、各部件的编写只需要花一点时间便能够完成架构的融合。

# 可伸缩性

​ 从服务器端来说,能继续导入大量用户时,能够承载大量人数在线,服务器可随时拓展到几百上千台服务器来提高承载;在服务量骤减时,或者平时访问量比较少时,服务器可减少到几台机子工作。能够减少服务器费用的开发。

从客户端的角度,体现在是否既能适应大型的项目,也能适应小型的项目。

# 容错性以及错误的感知力

​ 从服务端角度,容错性包括数据库容错性、应用服务器容错性、缓存服务器容错性,以及中心服务器容错性,每个环节出现问题都会通知相关中心服务器改变策略,或者监控服务器检测得知该服务器出现故障,自动更换成备用服务器或者更换链路。

​ 从客户端角度,容错性包括当程序发生错误时,是否同样能够继续保持运行而不崩溃;当这个页面程序出错时,是否依然能够运行其他程序而不闪退或崩溃。同时所有出现的程序错误,能够及时地记录下来并发送到后台,存储为错误日志,便于开发人员及时得到详细地错误信息,能够根据错误信息快速找出问题所在。

# 软件架构的思维方式

# 分层思维

	构建一套复杂系统时,我们整个系统划分为若干个层次,每一层专注解决某个领域的问题,并向上提供服务。这样的抽象做法,让复杂的事物变得更加清晰、有序。有些层次并不一定是横向的,也可以是纵向的,纵向的层次贯穿其他横向层次,称为共享层。

# 分治思维

​ 对于一个一次无法解决的大问题,我们先把大问题分解成若干个子问题,如果子问题还无法解决,则继续分解成子子问题,直到可以直接解决为止,这就是分解的过程;然后将子子问题的解组合成子问题的解,子啊将子问题的解组合成原问题的解,这就是组合的过程。

# 演化思维

​ 架构的好坏很大部分取决于架构对应变化的灵活性。所有具有演化式思维的架构师,能够在一开始设计时就考虑到后续架构的演化特性,并且将灵活应对变化的能力作为架构设计的主要考量。

​ 从单块架构的开始,随着架构师对业务领域理解的不断深入,也随着业务和团队规模的不断扩大,渐进式地把架构拆分成微服务架构的思路,就是演化式架构的思维。