编程即设计,代码即架构。程序员
###概述###编程
架构,这个词比较神秘,以至于不少程序员望而却步,觉得要什么了不起的本事。架构
架构的目标是什么呢?代码,实现所需服务;架构,致力于以更小成本、更高质量地实现所需服务。架构,是兼顾质量与成本的魔法。 但架构并不研究如何实现具体服务,—— 它研究的是如何妥善安置那些实现服务的构件,管理依赖、边界和变化。测试
-
如何将不变从变化中分离出来,沉淀为稳定的组件 ?如何管理组件之间的依赖 ?插件
-
如何识别组件所在的边界和上下文? 如何管理各类边界和上下文 ?架构设计
-
如何让变化更容易显露和识别 ? 如何管理多维度的变化 ?设计
-
如何让业务逻辑变成可配置的易变动的插件 ?开发
<br/>class
###目标###扩展
小问题小设计,大问题大架构。架构听上去高大上,实际上也是为了解决问题的。不过,架构与程序不一样,是在不一样层次上求解问题。
架构设计是宏观性考量,在总体上理解问题的复杂性,给出方案,并论证方案的可行性,提供一系列准则指导执行。缺少架构设计而直接着手处理问题,会出现三个严重问题:
-
在遇到实质性难题时,会束手无策或反复折腾,一次次返工,耗费大量的人力和成本;
-
缺少质量的考量,上线后发现没法知足用户的须要;
-
缺少总体的考虑,在业务发展的时候,原有实现不具扩展性,没法敏捷地支持中期和长远目标。
<br/>
所以,架构的目标主要有三个:
-
提早识别问题的复杂性和关注点,提供可行的通过论证的解决方案;
-
创建服务质量指标,肯定设计方案能够知足指定的质量指标;
-
规划总体设计,提供长远的可扩展性。
<br/>
要实现架构目标,先要问:要解决的问题是什么?问题的复杂性在哪里?弄清楚目标和靶点,才能一击命中。
<br/>
###衡量###
一个好的架构设计,它起什么做用呢?
-
是否是有针对性地解决了问题固有的复杂性? 经过提供渐进稳定的领域模型,让问题理解、描述和求解都更清晰天然了;
-
是否是令需求更快地实现,大幅下降了开发成本? 好比原来要花时间修改代码、测试、发布系统,后续只要新增配置,测试并刷新配置就搞定了;原来须要5人日,如今只须要 2人时;
-
是否是让系统的依赖更清晰了?好比原来你调我我调你,乱成一团,如今可以清晰地看到数据流在各个模块的流通和流向、脉络;
-
是否是更稳定了?好比原来磕磕碰碰,作百次操做就有一次失败,如今作十万次操做才有一次失败;
-
是否是更容易操做了?好比原来须要ABCDE五步操做,如今一键无忧完成;
-
是否是足够有弹性和灵活性,能够支撑数年的业务发展? 好比原来遇到新业务就要作许多兼容,如今只要配置一些规则、流程就能适应新业务的发展。对新增开放,对修改关闭。
<br/>
综上所述,架构设计至少有几个方面能够衡量:
-
识别出问题的关键复杂性,创建稳定有效的领域模型。
-
大幅下降开发与维护成本。 能够落定到人力与时间。
-
系统脉络更清晰。能够绘制出系统模块的依赖图,经过依赖图的节点与节点连接数量来判断。
-
更稳定。操做失败、出现各类问题的比率。
-
更容易操做。 操做的步骤数 乘以 操做失败的比率。
-
弹性和灵活性。 支持新业务的难度,以新增代码量和修改代码量来衡量。
<br/>