架构设计是门艺术。
一个优秀的程序员要想成为一名优秀的架构设计师,就改变编程的思维,学会使用架构设计的思维方式。
架构设计的思维方式有以下几种:
1. 分而治之的思维方式
分而治之,是把一件笼统模糊的事项变得清晰,把复杂的事项变得简单的思维方式。而这正是我们进行架构设计首要达成的目标。
架构设计师必须要学会架构分解,将软件的功能和非功能需求在架构的多个层面进行分解。
架构分解的时机要恰当,不要过早分解、也不要过度分解,通常的分解时机就是架构构造和演变时。
架构分解应当遵循以下原则:
-
高内聚、低耦合。
-
层次性。分解的顺序一般是系统→子系统→模块→组件→类。
-
正交原则。分解出的架构元素符合正交原则。
-
抽象原则。分解出的架构元素应当是架构设计师抽象的结果。
-
稳定性原则。应当将稳定架构元素和不稳定的架构元素独立。
-
复用性原则。架构设计应当和软件一样,要考虑复用和可复用的设计。
2. 聚而合之的思维方式
分而治之的目的是降低难度,但软件的设计和实现最终还是要将分解的各个元素组合在一起。所以,不能为了分解而分解,在分解的过程中也要考虑将来的集成。毕竟如果分解后的内容无法集成在一起,分解得再详细,再清晰也没有任何意义。
3. 动静分离的思维方式
动静分离的思维方式要求将系统中的静态资源与动态资源分离,同时又要注意二者结合的架构设计。因为动态的流程和用例无法离开静态的数据和类就能自行完成的。
4. 复用的思维方式
复用是最佳的软件工程实践,没有之一。复用可以给我们带来以下好处:
-
较高的生产率。
-
较高的系统质量。
-
改善系统的可维护性。
所以,我们在进行架构设计时也需要使用复用思维,将各个模块需要用到的共性功能抽取为可复用的共性组件。
我们可以将复用分为常规复用和系统层复用。
其中常规复用又可分为代码复用、算法复用、数据结构的复用;系统层复用又可分为设计复用、分析复用。
5. 分层的思维方式
分层是将各架构元素通过分层重新构建的过程,各层之间要保持独立设计和松耦合。
分层的思维方式可以使软件架构具有如下优点:
-
开发人员可以只关注某一层。
-
可以很容易地用新的实现来替换原有层的实现。
-
可以降低层与层之间的依赖。
-
有利于标准化。
-
有利于各层逻辑的复用。
6. 模式的思维方式
架构模式是一套成熟的、通用的、可重用的解决方案,在进行架构设计时,架构设计师要能够根据业务需求来挑选最适合的架构模式。
架构模式一般有分层模式、客户端-服务器模式、主从设备模式、管道-过滤器模式、代理模式、P2P模式、事件总线模式、MVC模式、黑板模式和解释器模式等。
7. 抽象的思维方式
抽象包括两个层面的内容:一个层面是将各种类似场景的实现归纳成一种规则或方法出来供以后的设计用;另一个层面是将非类似场景中的共性内容总结出来,进一步抽象为类似的东西。
8. 结构化的思维方式
结构化是一种注重结构完整性的思维方式,它强调在分析问题的过程中,要考虑整体性,不要马上陷入细节。结构化思维的核心在于对问题进行正确界定的基础上(以终为始),对问题的构成要素进行合理分类,并对其中的重点环节进行分析(要事第一)。
结构化应遵循以下原则:
-
以终为始。
-
知道设计的目标,根据目标倒推需要完成的工作和任务。
-
不要先入为主,避免陷入细节。
-
各架构元素相互独立。
-
各架构元素无遗漏。
-
迭代的思维方式
没有最好,只有更好。架构设计也要随着业务需求的变化不断迭代和演化。
这正是:
架构设计不简单,思维方式数半天
学习前人获经验,优秀架构不再难