高层架构&底层设计细节
架构”这个词往往使用于“高层级”的讨论中。这类讨论一般都把“底层”的实现细节排除在外。而“设计”一词,往往用来指代具体的系统代码组织结构和实现细节。但是,从一个真正的系统架构师的日常工作来看,这样的区分是根本不成立的。
底层设计细节和高层架构信息是不可分割的。只考虑高层架构,而不考虑设计细节会导致架构师脱离一线,导致架构师永远不了解具体开发代码时会遇到什么问题。而只考虑设计细节而不考虑架构会导致视野的局限性,没有全局观,设计出来的系统可能边界不清楚,组件划分不明确,系统最终成为一团谁也理不清的乱麻。
所以一个好的架构师首先要做高层架构来梳理整个系统的边界,组件划分,从而构建一个职责清晰的架构视图,然后还要对架构进行推演,思考具体实施时会遇到哪些问题。
软件架构的终极目标
软件架构的终极目标是,用最小的人力成本来满足构建和维护该系统的需求。
构建:从0到1完成系统开发的成本
维护:新增功能,修改已有功能的成本。(相比构建更重要)
构建从0到1的系统,会很快,不是问题,问题是后期的功能迭代的成本。如果软件架构比较糟糕,那么会导致后期迭代很小的功能也需要花费大量的人力资源。如果在构建系统时通过合理的模块划分,分层,抽象,根据SOLID设计原则来构建软件,则会把系统划分为边界良好的组件,然后提供足够的扩展性,从而会使迭代功能成本比较低
好的设计和架构可以减少系统的构建和维护成本,提高生产力。
行为价值&架构价值
行为价值:根据需求实现的用例功能,这些可以给企业带来盈利
架构价值:软件应该容易被修改,新增或者修改已有功能
长远看架构价值更重要。架构混乱会导致系统越来越难维护,后期迭代功能时候成本越来越高。
编程范式
结构化编程
结构化程序设计则采用自顶向下、逐步求精的设计方法,各个模块通过“顺序、选择、循环”的控制结构进行连接,并且只有一个入口、一个出口。
结构化程序设计的原则可表示为:程序=(算法)+(数据结构)。算法是一个独立的整体,数据结构(包含数据类型与数据)也是一个独立的整体。两者分开设计,以算法(函数或过程)为主。
-
自顶向下
程序设计时,应先考虑总体,后考虑细节;先考虑全局目标,后考虑局部目标。不要一开始就过多追求众多的细节,先从最上层总目标开始设计,逐步使问题具体化。 -
逐步细化
对复杂问题,应设计一些子目标作为过渡,逐步细化。 -
模块化