第 7 章 Go中重构

我们已经探索了整个测试金字塔中的概念和技术,并在构建主要研究项目——BookSwap 应用程序时应用了这些概念。当前,这个 Web 应用程序通过以下方式进行验证:

  • 使用 Go 标准库实现的单元测试

  • 使用 httptest 实现的集成测试

  • 使用 Godog 实现的端到端测试

为了在一个现实的例子中演示这些技术,我们扩展了 BookSwap 应用程序的功能,增加了多个组件。在第 6 章《端到端测试 BookSwap Web 应用程序》中,我们通过添加 Docker 支持和使用 PostgreSQL 数据库来保存数据,进一步扩展了项目。

所有这些变更为我们的 BookSwap 应用程序增加了复杂性,现在它依赖于以下内容:

  • 两个用于数据库迁移和操作的库——golang-migrategorm

  • 三种不同类型的文件——源代码文件、实现文件和 Docker 文件

  • 一个复杂的代码结构,包含多个层次——dbhandlerscmd

BookSwap 应用程序最初是一个简单的 REST API,功能范围较小。然而,随着我们不断改进并添加更多代码,应用程序的安装和启动变得越来越复杂。这是软件项目自然生命周期的一部分。作为一名工程师,您更常遇到的是修改和扩展现有代码,进行棕地开发,而不是从零开始实现全新的项目,也就是绿地开发。

本章专门讨论代码重构,即修改和重组现有代码。基于我们在实现和测试 BookSwap 应用程序中的经验,我们将学习代码重构的良好实践。接着,我们将了解如何验证重构后的代码的行为,它应该与其旧版代码表现和行为一致。最后,我们将讨论将单体应用程序拆分为微服务的最佳实践。

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

  • 什么是代码重构,为什么它是开发过程中的重要环节

  • 如何有效地改变实现和测试代码

  • Go 中的错误验证

  • 如何验证重构成功的标准

  • 拆分单体应用程序的良好实践

技术要求

为了运行本章中的代码示例,您需要安装 Go 1.19 或更高版本。安装过程可以参考官方 Go 文档,地址为 https://go.dev/doc/install。

本书中的代码示例可以在 https://github.com/PacktPublishing/Test-Driven-Development-in-Go/chapter07 上公开获取。