软件设计:从专业到卓越
上QQ阅读APP看书,第一时间看更新

本书共12章,按照软件工程师技能提升的顺序,分为品味篇、专业篇和卓越篇。这三部分分别覆盖了认知和技能提升的3个层次:辨别什么是好的设计,提升专业素养,以及掌握卓越开发实践。

品味篇分别从价值和特征角度,定义了什么是好的设计。只有就什么是好的设计达成共识,开发团队才能更加顺畅地协作。这一共识也是后面两部分讨论的基础。

专业篇讲解了现代编程实践的基本技能,包括提炼高质量需求、建立领域模型,以及实现高质量模块化设计的两个要素:高质量完成设计分解和高质量管理依赖。

卓越篇是本书的核心内容,也是高效编程的关键。这部分讲解了测试先行、由外而内、演进式设计等现代软件设计实践。熟练掌握这些实践可以大幅提升编程效率和质量。

本书各篇包含的章节如下。

品味篇包含2章。它们关注如何评判好的设计。

第1章:优质代码的外部特征,介绍如何从最终价值的角度评判好的设计。

第2章:优质代码的内在特征,介绍如何从专业人员的视角评判好的设计。

这两章的标题使用了“优质代码”这个词,而没有使用“优质设计”,这是刻意为之。在编程这个领域,真正的最终制品是代码——代码是设计的结果。唯有关心真正的结果,才可以避免纸上谈兵。当然,也唯有关心设计,代码才能具有灵魂,成为真正的高质量代码。

专业篇包含4章。它们聚焦设计高质量软件应具备的基本而又重要的能力。

第3章:高质量的需求。软件工程师需要关心“需求从哪里来”“系统应该做成什么样”这类基础问题。只有把需求说清楚,开发的软件才有价值。同时,需求是现代软件设计的真正灵魂——领域模型的源泉。这一章介绍了需求分析金字塔、需求分析和建模、事件驱动分析、实例化需求等实践。

第4章:领域建模。没有高质量的领域模型,设计出的软件就很难拥有易理解、易复用和易扩展等特征,业务能力也无处沉淀。这一章介绍了领域模型和统一语言等重要概念,以及发现、表达高质量领域模型的方法。

第5章:设计分解和责任分配。设计的本质就是分解和抽象。这一章的核心目标是实现好的分解,好的分解需要遵循高内聚、低耦合的设计原则。

第6章:依赖、接口和契约。分解必然意味着依赖。良好的依赖会加强设计的内聚性、可复用性和稳定性。如果缺失良好的依赖则相反。这一章介绍了依赖设计的原则、需求方接口和提供方接口等基础概念,以及提升依赖设计质量的设计契约和降低依赖强度的事件机制。

卓越篇包含6章。这6章占用了本书近一半的篇幅,重点介绍了现代软件设计的关键实践。

第7章:用测试描述需求和契约。“测试”不再是简单的测试。它是更精确地沟通需求和设计要求的手段。这一章介绍了测试先行的核心价值,给设计带来的关键变化,以及测试先行的实践,也介绍了行为测试驱动开发的框架。

第8章:用领域模型指导实现。领域模型不仅仅是问题分析和认知的工具,它还是软件实现的指引。这一章介绍了如何使用领域驱动设计的模式来指导编码,包括了基本构造块、聚合、限界上下文及上下文映射等重要实践。

第9章:由外而内的设计。由外而内、从价值出发渐进完成设计和编码。由外而内是高效软件开发的重要技能。这一章介绍了由外而内、意图导向、测试替身等重要实践。

第10章:设计质量贯穿始终。质量是可持续发展的最重要因素。没有好的设计质量,可持续就是一句空话。这一章介绍了质量内建的概念以及契约式设计、防御式编程、自动化测试、设计评审等实用方法和技术。

第11章:让设计持续演进。演进是设计的本质特性,也只有演进,才能赋予软件长久的生命力。这一章从演进式设计的视角,介绍极限编程方法的卓越实践:简单设计、重构、测试驱动开发和持续集成。

第12章:精益思想和高效编程。这一章不介绍实践性的内容,而是从精益思想的视角,对由外而内、设计质量、设计演进等实践进行了思考和分析。