第 7 章 驱动设计 – TDD 和 SOLID

到目前为止,我们已经创建了一些基本的单元测试,这些测试推动了几种类别的简单设计。我们已经体验了 测试驱动开发TDD)如何使设计选择决策成为核心。为了构建一个更大的应用程序,我们将需要能够处理更复杂的设计。为此,我们将应用一些推荐的方法来评估什么使一个设计比另一个更可取。

SOLID 原则是五个设计准则,它们引导设计变得更加灵活和模块化。SOLID 这个词是一个缩写,每个字母代表一个以其开头的原则。这些原则在被这个名称所知之前就已经存在了。根据我的经验,它们已被证明是有帮助的,值得理解每个原则带来的好处以及我们如何将它们应用到我们的代码中。为此,我们将在本章中使用一个运行中的代码示例。这是一个简单的程序,它使用简单的美国信息交换标准代码(ASCII)艺术在控制台上绘制各种形状。

在我们开始之前,让我们思考一下学习这五个原则的最佳顺序。SOLID 这个缩写很容易说,但它并不是学习这些原则的最简单方式。一些原则建立在其他原则之上。经验表明,某些原则比其他原则更常用,尤其是在进行 TDD 时。因此,我们将按照 SDLOI 的顺序来回顾这些原则。我确信你会同意,这听起来并不那么好,但它提供了一个更好的学习顺序。

最初,SOLID 原则被认为是适用于面向对象编程(OOP)中类的模式,但它们比这更具有通用性。它们同样适用于类中的个别方法以及类本身。它们也适用于微服务互连的设计和函数式编程中的函数设计。我们将在本章中看到应用于类级别和方法级别的示例。

在本章中,我们将涵盖以下主要主题:

  • 测试指南——我们驱动设计

  • 单一职责原则(SRP)——简单的构建块

  • 依赖倒置原则(DIP)——隐藏不相关的细节

  • 里氏替换原则(LSP)——可交换的对象

  • 开闭原则(OCP)——可扩展的设计

  • 接口隔离原则(ISP)——有效的接口

技术要求

本章的代码可以在 https://github.com/PacktPublishing/Test-Driven-Development-with-Java/tree/main/chapter07 找到。提供了一个运行中的代码示例,该示例使用所有五个 SOLID 原则来绘制形状。