开发团队中健康的工作关系将直接有益于软件设计。不健康的关系和个性膨胀会导致不健康的软件。
内聚和耦合
软件设计的关键品质是内聚和耦合。这不是什么新奇的“面向对象”概念;我们的目标是通过设计使系统的组件具备下列品质:
高内聚:
内聚是一个测量指标,说明相关的功能如何聚集在一起,模块内的各部分作为一个整体工作的如何。内聚性是将模块粘成一个整体的胶水。
弱内聚的模块是不良分解的信号。每个模块都必须具有清晰定义的角色,而不只是一堆不相关的功能。
低耦合
耦合是模块之间独立性的测量指标--它们之间进出“电线”的数量。在最简单的设计中,模块几乎没有什么耦合,所以彼此之间的依赖关系较少。
显然,模块不能够完全解耦,否则它们将根本不能够一起工作!
好的软件设计会限制通信的线路,只提供那些绝对需要的。这种通信线路是确定架构的一部分因素。
好的设计考虑到内部组件连接机制和连接数(以及连接性质)。系统的单个部分应该能够独立存在。紧耦合将导致不可测试的代码。
松弛而模块的架构将导致每个代码组件编写得不好,并且相互之间匹配得不好。它也会导致重复的代码和工作。
保持品质
从一开始,“设计之城”就准备好了一些品质控制过程:
- 结对编程。
- 对没有结对编程的工作进行代码/设计复审。
- 对每一段代码进行单元测试。
这些过程确保了系统中从未加入不正确的,不合适的变更。所有不符合软件设计的内容都被拒之门外。
管理技术债务
随着最后期限的临近,一些不太重要的功能被砍掉,让产品能够准时推出。小的代码“瑕疵”或设计问题允许存在于代码集中,要么是为了让功能快一点实现,要么是为了在接近发布时避免高风险的改动。
这些逃避职责的地方被标记为技术债务,并安排在后续的版本发布中修正。