混乱大都市
特点:
微观层面特点:
1. 没有统一的概念将不同的部分组织起来
2. 代码风格不一致
3. 控制流无法预测,即控制流的流向很复杂
4. 额外的数据缓存,其目的让数据停留在更方便的地方(但是,容易造成数据的不一致性,维护或扩展不方便)
5. 没有人了解整个系统,没有任何文档
宏观层面特点:
1. 系统没有弹性,无法变更和添加新功能
2. 版本周期过长,低品质的软件
3. 对第三方支持协议,涉及太多内部结构。会出现难以理解的、不容易复现的错误。
4. 团队新成员不理解整个系统,不能搞请状况,流失率高
原因:
造成的恶果的原因:
1. 没有清晰的需求。这个是项目开始之初,团队就不知道要构建什么。这个是混乱的一个重要原因。
2. 系统结构难以理解,坏的架构设计只会招致更坏的设计(因为想解决问题,只能选用阻力最小的方法)
3. 缺乏内聚,不相关的功能放在一起,没有清晰的角色定义
4. 不必要的耦合。系统没有最底层,没有控制中心,所有组件必须一开始就创建。这使得代码层次的测试不能进行。
5. 没有共同的代码风格,没有共同的库,没有共同的命名习惯。重复的代码到处被使用。
6. 开发周期过长,造成整个系统测试、迭代困难,软件质量没有保证,这个即使恶果,又是原因之一
------------
设计之城
而比较成功的设计,往往是一个持续的过程,不仅仅表现为几个特征
如设计之城的各阶段的特征:
在设计早期:
1. 确定了主要的功能领域,并推出初步架构
2. 系统中各独立部分的位置关系体现为传统的分层结构。并且,这些是基本的系统设计,可以随功能模块添加进行扩展。
3. 一些基本关注点的决定:
1) 顶层文件结构
2) 如何对事物命名
3) 内部"展示"风格
4) 共同的编码惯例
5) 选择单元测试
6) 一些基础设施的选择(如版本控制、系统的构建与持续集成)