第1章:现代软件交付模式 SaaS
创建时间:2025年10月28日 01:52:59

本章将带您踏上构建 软件即服务(SaaS) 应用程序的旅程。我们将从SaaS的核心概念讲起,回顾软件工程的发展简史,探讨SaaS为何能成为当今的主流模式,以及它为各种规模的企业和团队带来的显著优势。

最后,我们将介绍您作为开发人员所需掌握的工具和技术,以便能够运用SaaS模式解决真实世界的问题。本章重在建立宏观认知,不会深入具体技能的细节,那些将由后续章节详细阐述。

本章主要涵盖以下内容:

  • 解释什么是SaaS?
  • 探讨其他类型的应用程序。
  • 回顾SaaS的起源与发展。
  • 分析企业选择SaaS的原因。
  • 介绍构建SaaS应用程序所需的工具。
  • 介绍用于构建SaaS应用程序的关键技术。
  • 探讨SaaS对开发过程的影响。
  • 阐明阅读本书的预期收获。
  • 提供评估和偿还技术债务的方法。

通过阅读本章,您将对SaaS建立清晰的定义,了解应用程序开发的演进历史,并对本书将要涉及的工具和技术有一个整体的认识。希望这本书能对您大有裨益!

什么是 SaaS?

SaaS 已成为向用户交付应用程序的主流模式。但它究竟是什么?简单来说,SaaS应用程序是通过互联网和浏览器交付给用户的软件,通常以按月订阅的付费方式使用。

虽然这个定义在技术上没错,但它掩盖了其背后巨大的复杂性——无论是对用户、供应商,还是对开发者而言。

在本章中,我们将逐步建立对SaaS的深入理解,掌握使用 Microsoft 技术栈从零开始构建SaaS应用所需的技术、操作和功能知识。我们将扩展上述定义,让您作为未来的SaaS开发者,能够通过提供基于SaaS的解决方案来应对和解决实际问题!

让我们先从扩展这个定义开始。

SaaS通常被理解为通过浏览器交付和交互的应用程序。软件本身不安装在用户的计算机上,用户也不“拥有”它。相反,用户通过支付月度订阅费来获取服务的访问权限。

从用户的角度来看,这样做的好处显而易见:他们可以在任何时间、任何地点、通过任何设备访问应用程序,并且无需担心软件的安装、更新和维护。

世界上许多知名的科技公司都在提供SaaS应用,您很可能每天都在使用它们!

Gmail 就是谷歌提供的一款SaaS应用。虽然它对大多数用户免费,但企业用户或需要高级功能的用户则需要付费订阅。除了邮件客户端,谷歌还提供日历、联系人管理以及一套办公工具(文档、表格、演示文稿),这些都是SaaS服务。

所有社交媒体网站也是SaaS应用的例子。尽管它们对普通用户免费,但其主要收入来源于大量企业付费投放的广告。

除了这些巨头,还有成千上万的软件企业在使用SaaS模式交付产品。从供应商的角度看,这种模式的好处众多。最明显的是,它面向一个真正意义上的全球化庞大市场,收入天花板极高。此外,技术团队和支持团队都只需要维护应用程序的一个版本。供应商一旦推出更新,所有用户都会立即用上最新版本。理论上,SaaS在几乎所有情况下都是一个明智的选择。然而,构建SaaS绝非易事!

尽管SaaS为业务带来诸多好处,但负责构建应用的团队也将面临重重挑战。而从技术专家的角度来看,这正是其魅力所在!

不过,在深入SaaS应用的细节之前,让我们先看看还有哪些其他的软件交付模式。

还有哪些其他类型的应用程序?

尽管本书的主题是SaaS,但在讨论它是什么以及为何是更优选择时,将其与其他应用交付机制进行对比会更有助于理解。

以下各节将讨论其他传统的交付机制。

桌面应用程序

这是最传统的应用类型,曾是多年来的主流模式。软件被打包成安装程序,通过软盘、CD或互联网下载等方式分发给最终用户。

应用程序将其所有文件和数据都存储在用户的本地计算机上。

通常,这类应用需要使用产品密钥来激活。或者,企业可以部署一个许可服务器,以便在多台计算机上授权使用该产品。

付费模式:为产品密钥付费。

内部部署(On-Premise)Web应用程序

这种类型的应用在很大程度上已被SaaS系统取代。但在过去,开发一个可以出售给多个客户并由客户自行部署在内部服务器上的Web应用是很常见的。

内部部署Web应用的主要好处是,采购公司保留对该应用的完全控制权。这意味着他们可以根据成本和收益来评估并决定是否安装新版本。

这种模式的另一个优点是,所有数据(无论是存储在数据库中还是在客户端与服务器之间传输)都完全保留在公司内部网络中,永远无需暴露于公共互联网。理论上,这确保了更高的数据安全性。

然而,与此观点相对的是:虽然将数据保留在自有网络中看似更安全,但主流云服务商已投入巨额资源来保障其基础设施和数据的安全。事实上,依赖于专业云服务商的安全性,往往比依赖公司内部网络更为可靠。

虽然采购公司可以自主选择版本和部署更新,但这也意味着他们需要雇佣专门的人员来安装和管理应用,从而增加了维护成本。

付费模式:为版本升级付费。

什么是“云”?

“云”是SaaS和浏览器交付应用的核心概念。它赋予了应用高可用性、高可靠性以及近乎无限的即时扩展能力。

对于SaaS应用而言,“云”至关重要。在几乎所有情况下,应用的每个组件——数据库、API和用户界面(UI)——都将托管在云服务商上。国内常见的云服务商有阿里云、腾讯云等;国外则有微软Azure、谷歌云(GCP)和亚马逊云科技(AWS)。

大型云服务商本质上提供的是对海量计算能力的按需访问服务,这被称为基础设施即服务(IaaS),它是SaaS模式的一个重要支柱。

IaaS 为 SaaS 提供了坚实的基础设施支持。

这一切是从哪里开始的?

虽然这不是一本编程历史书,但简要回顾过去60多年的应用开发历程,有助于我们理解SaaS是如何应运而生的。

我第一次接触专业编程是在20世纪80年代末,当时我大约6岁。我被带到一个机房,里面有一台巨大的VAX“主机”负责所有计算。办公室里,员工的桌上都摆着连接到主机的终端(就像电影《黑客帝国》里那样,满屏都是绿色字符)。由于计算机的成本极其高昂,所以只能集中部署一台主机,而其他人则使用终端进行操作。

尽管当时的设备很简单,但我立刻就被迷住了。这段经历显然在我心中埋下了种子,让我追随父亲的脚步,也成为了一名应用开发者,尽管我们使用的工具已截然不同!

在20世纪80年代,我们离SaaS还非常遥远(尽管“主机-终端”的架构可能为后来的某些思想提供了灵感)。

虽然互联网技术自20世纪60年代就已存在,但它远非我们今天所熟知的形态。直到90年代末,互联网对大多数人来说仍是一个技术上的“新奇事物”,而不是交付应用的核心基石。

构建SaaS应用所需的一项关键技术突破发生在1994年8月,当时Daniel Kohn完成了第一笔安全的在线信用卡交易。同年11月,Netscape Navigator浏览器推出了SSL协议,这使得任何人都可以在技术上通过互联网进行安全交易,而不必担心信息被盗。

亚马逊几乎立刻抓住了这一机遇,于次年成立,eBay也紧随其后。这是人们首次在一定程度上信任地将信用卡信息输入互联网,但这种做法远未成为主流。

第一个真正的SaaS应用很快便出现了。Salesforce于1999年发布了其CRM平台,这被广泛认为是第一款真正的SaaS应用。

然而,说SaaS始于1999年并不完全准确。当然,Salesforce遥遥领先,其在SaaS领域的持续投资在接下来的几十年里为公司创造了巨大的商业成功。但在1999年,互联网对绝大多数人来说仍然很陌生。虽然Salesforce可以依赖其拥有(相对)高速互联网连接的企业客户,但SaaS应用的覆盖范围非常有限。当时拥有互联网的家庭寥寥无几,更不用说宽带连接了。绝大多数人甚至不敢在互联网上透露自己的真实姓名,更别提信用卡信息了!SaaS的普及时代尚未到来。

当我在21世纪初开始我的开发生涯时,企业编程环境已经发生了翻天覆地的变化。VAX主机已不见踪影,取而代之的是我们办公桌上性能强大的个人计算机。计算不再需要委托给中央大型机,我们可以在自己的电脑上完成。于是在整个90年代,成千上万的开发者生产了数百万个“灰盒子”桌面应用,它们通常用VB6编写,安装过程晦涩复杂。这并非应用开发的黄金时代,尤其对于当时占绝大多数的企业应用而言。

大约在同一时期,互联网开始作为日常商业工具逐渐成熟,并迅速普及到普通家庭。但即便在21世纪初,“Web应用”或Web 2.0的概念仍在发展中。当然,有PHP和ASP这样的技术可以构建Web应用,但这些应用往往更像是“聪明的网站”,而非我们今天所认为的成熟“Web应用”。尽管在线支付已变得相当普遍,但按月为“服务”付费的理念尚未形成。人们的期望仍然是“购买”软件,从而“拥有”它,并自行“安装”。

当然,在接下来的二十年里,这一切都将改变。

ASP.NET的出现极大地推动了Web开发。Visual Studio提供的所见即所得(WYSIWYG)编辑器,让习惯了VB6开发“灰盒子”的开发者感到非常亲切。“企业”几乎立刻接受了“Web应用”,用以取代那些陈旧且常被诟病的桌面应用。

这一转变让一代上班族了解了Web交付软件的好处,不久之后,他们便开始期望所有应用都能如此,包括个人生活中使用的应用。

电子邮件很可能是第一个完全网络化的个人服务。Gmail测试版于2004年推出,当时免费提供高达1GB的存储空间,并可通过付费获得更多容量!消费级软件的月度“订阅”模式就此诞生。

如今,SaaS应用的消费市场无比巨大,涵盖了任务列表、笔记、日记和电子邮件等各类服务。更不用说,娱乐现在也“作为服务”提供,Netflix、Spotify等流媒体服务的月度订阅已成为许多家庭的标配。

人们对在互联网上输入支付信息已无顾虑。几乎所有家庭都拥有宽带互联网,甚至发展中国家也普及了强大的移动数据网络和智能手机。通过网络提供按月订阅的云应用,已再无障碍。

很明显,SaaS已经“吞噬”了世界,并成为交付软件的主导模式!SaaS时代已然来临!

为什么SaaS是企业的热门选择?

SaaS正成为各行各业、各种规模企业中越来越受欢迎的选择。它在不同的商业模式中无处不在。这背后有很多原因,但归根结底,源于它能够为用户增加价值,同时为供应商增加收入。这是一种双赢的模式。

通过互联网和浏览器,可以开发和交付各种不同的应用。相同的技术栈,意味着同一个开发团队,基本上可以用来交付企业能想到的任何类型的应用。这使得它对初创企业和跨国巨头的吸引力几乎相同。

在使用传统的桌面应用或内部部署应用时,企业需要与所有客户建立直接联系来开具发票、提供更新等。获取新客户需要销售团队,为新用户部署实例需要技术团队。考虑到每个客户的安装环境各不相同,往往还需要一个庞大的支持团队来应对无数的安装问题。

所有这些麻烦都随着SaaS的出现而消失。唯一的扩展性考量是虚拟服务器的可用性,而在Azure和AWS的时代,这种资源几乎是无限的。

由于SaaS同时为用户和供应商增加了价值,它已成为各种规模企业的明智之选。

构建SaaS应用需要哪些工具?

开发SaaS应用的工具范围非常广泛,其本质决定了我们需要特定的工具来构建和测试数据库、API和前端,还需要许多辅助工具,如静态分析、构建管道、源代码控制和容器化工具等。

本书将聚焦于微软的技术栈,因此主要使用微软的工具。但我们会用到很多种工具,这正是构建SaaS应用的特点。

数据库开发

从技术栈的底层开始,我们将使用 SQL Server Express 来完成所有数据库工作。它可以直接安装在您的开发机上,也可以使用Docker在容器中运行。这两种方法在本书中都会详细描述,但我们通常更倾向于基于 Docker 的解决方案。

API 开发

API(应用程序编程接口)是一组规则和协议,用于指定不同软件系统应如何相互通信。它允许一个系统(例如移动应用或网站)访问另一个系统(例如后端服务器或数据库)的数据和功能,是实现系统集成和功能共享的关键。在本书中,API将使用C#和.NET 8(当前的长期支持版本)进行开发。

前端开发

构建SaaS应用程序的前端时,我们有很多优秀的选择,具体决策在很大程度上取决于个人偏好、团队技能或开发人员市场的可用性。

在撰写本文时,最常用的前端技术依然是基于 JavaScript 的框架(如 Angular 或 React)。然而,WebAssembly 代表了未来的一个重要方向,微软推出的 Blazor 技术就运用了它,允许开发者使用熟悉的 .NET 语言(如 C#)来构建前端。本书将使用 Blazor 构建前端,但考虑到 JavaScript 框架的流行度,我会确保所解释的原则具有通用性,以便您能将从 Blazor 中学到的知识应用到任何其他前端框架中。

认证和授权

无论使用哪种前端技术,正确的身份验证和授权都至关重要。我们将在本书后面用整整一章来专门阐述这一点。我们将使用 OAuth 2.0 协议进行实现,并演示如何保护您的SaaS应用,从UI一直到数据库!

主机

每一个SaaS应用都需要一个托管的地方,而且通常都在“云”中。虽然本书的大部分内容将侧重于在本地开发,但我们也将探讨如何构建部署管道,并展示应用的“上线”过程。我们将使用 Azure 门户进行所有应用和数据库的托管。

Docker

开发SaaS应用是“全栈”开发的缩影。我们将使用从数据库到前端的各种工具,更不用说用于测试所有这些组件的不同测试框架。因此,我们将大量依赖 Docker 来封装这些依赖项并简化开发过程。Docker本身是一个巨大的话题,全面解释它是什么以及做什么超出了本书的范围。简单地说,Docker允许我们将各种复杂性封装在一个非常简单易用的容器中。

例如,考虑对UI和API执行数千个单元测试,可能还需要一些集成和端到端(E2E)测试。在本地运行这些测试可能涉及许多依赖项,配置开发环境以成功执行测试套件通常很耗时。

有了Docker,我们可以将完整的测试套件封装在一个Docker容器中,用一个简单的Docker命令来运行。此外,这些测试将在任何运行Docker客户端的机器上以完全相同的方式运行。因此,Docker化的测试套件可以在Mac、Windows或Linux上,以及在云服务器的CI/CD管道中同样良好地运行。

简而言之,Docker封装了复杂性,并促进了与复杂系统的简单交互。

构建SaaS应用需要哪些关键技术?

实际上,开发SaaS应用所使用的技术与开发其他类型的软件应用并无本质区别。然而,我将简要提及一些在本书中会重点使用的关键技术和方法论。

测试驱动开发(TDD)

SaaS的一大好处是应用可以非常快速地更新,基本上只需点击一个按钮就能将新功能推广给每个用户。

如果一切按预期工作,这当然很好;但如果代码中存在错误,那就糟了。我们当然可以建立一套广泛的手动回归测试流程,但这样做会失去SaaS的核心优势之一:频繁且尽早地发布。

要确保快速部署的可靠性,唯一的办法就是建立自动化测试。而遵循测试驱动开发(TDD)的模式,是构建自动化测试套件的最佳方法之一。

我知道TDD目前在业界的声誉有些好坏参半。在我看来,这是因为TDD的实践一旦出错,就会成为一场噩梦,而且这种情况并不少见。在本书中,我将介绍一种我认为非常适合SaaS应用开发的TDD实践方法,它将成为我们开发的坚实支柱。

领域驱动设计(DDD)

DDD被定义为一种软件开发方法,其中业务问题由领域专家定义,而不是由中层管理人员指定。

DDD是一种专注于理解和建模应用业务领域,以改进软件设计和实现的开发方法。它强调领域知识在软件开发中的重要性,并鼓励在系统设计和实现中使用特定领域的通用语言。

在DDD中,业务领域被视为组织专业知识的核心,而正在开发的软件则是支持和加强该领域工作的工具。DDD的目标是创建既符合业务需求和组织目标,又能准确反映业务领域复杂性和细微差别的软件。

SaaS产品通常直接面向所有互联网用户,没有专门的销售团队逐一接触客户并推销产品。因此,产品必须能够自我推销,这意味着它本身必须足够有用。为了实现这一点,产品必须精准地满足特定用户的需求并解决特定领域的问题。

微服务

SaaS项目需要高度的灵活性,以确保产品能够随着市场和客户需求的变化而演进。因此,产品的架构必须支持在最小化影响现有功能的前提下,轻松地添加新功能。基于微服务的体系结构恰好满足这一要求。我们将在后续章节中通过一个具体案例来设计和实现微服务架构。

多租户

因为每个用户都是同一个应用部署实例中的“租户”,所以必须在数据存储和检索系统中将用户数据隔离开来。有很多方法可以解决这个问题,这些方法将在本书的下一章中进行详细讨论。

响应式设计

SaaS应用在线运行,通过浏览器访问。在智能手机和平板电脑普及的今天,我们无法预知用户会使用哪种设备访问应用。因此,前端必须能在任何类型的设备上良好工作,或者至少在无法运行时能够“优雅地降级”。

UI的设计必须是“响应式的”,这意味着它可以根据显示设备的特性以合适的方式呈现。

渐进式Web应用(PWA)

当我们构建SaaS应用时,我们希望用户感觉他们正在使用一个成熟的“应用”。然而,如果没有互联网连接,网站就无法显示。基于PWA的设计通过允许有限的功能在网络连接很差或没有网络的情况下依然可用,从而解决了这个问题。

当然,由于无法访问后端,网站的许多功能将不可用。这是无法避免的,但PWA可以用来减轻用户的“离线焦虑”,因此这是SaaS应用开发者应该了解的一项重要技术。

我们将展示如何使用Blazor作为前端技术来构建PWA。

无需安装

这是推动企业采用SaaS解决方案的最重要原因之一。

在传统应用模式下,新客户通常需要联系销售团队,有时还需要技术支持团队的协助,才能在本地安装软件并获得许可。 有了SaaS,新客户可以在几秒钟内发现应用并注册账户,无需与提供商进行任何联系。这对公司来说是巨大的成本节约,因为不再需要销售或支持团队来 onboarding 新客户。这也消除了从发现到安装之间的时间差,避免了客户在此期间改变主意或转向竞争对手。

基于浏览器的交付

SaaS应用的用户不再局限于特定计算机或特定网络环境。用户可以从世界任何地方的任何联网设备访问应用。在智能手机和平板电脑时代,用户甚至可能不需要电脑就能充分利用服务。

可扩展性

在传统模式下,这一点几乎不可能实现。说服个人在电脑上安装应用已经很难,说服公司这样做则难上加难。扩大桌面应用的用户群需要专门的销售和支持团队。而使用SaaS应用,用户只需在线注册即可。

由于SaaS应用托管在云端(Azure、GCP或AWS),如果需求突然激增,基础设施几乎可以瞬间扩展。没有其他软件交付模式能够应对一夜之间需求增长10倍的挑战而让供应商从容不迫!

可升级性

在“遗留”的交付模式下,升级应用对供应商来说往往极其复杂和昂贵。

想象一个传统的桌面应用,它可能安装在数百家不同企业的数百台机器上。没有两家公司的硬件或操作系统版本是完全相同的,因此不可能让每个人都使用相同版本的软件。同样,统一推送新版本升级也是不可能的。充其量,你只能在特定时间停止对某个版本的支持,并希望每个人都停止使用它(然而他们并不会)。

对于内部部署的Web应用,也存在类似问题。虽然安装实例较少,但仍会有许多不同的版本以满足特定的业务需求。 当你转向SaaS模式时,这个问题就完全消失了。供应商可以完全控制升级,只需点击一个按钮,就能一次性向所有客户推出更新。 只有一个版本的应用需要支持,这对供应商来说是巨大的成本节约,对开发团队来说也是巨大的优势。

快速迭代

SaaS应用可升级性带来的一个突出好处是能够极其快速地迭代解决方案。关于新功能的反馈可以在很短的周期内被采纳并推送给所有用户。这使得从“开发者编写功能”到“功能为用户提供价值并为供应商创造收入”的转化周期大大缩短。

想一想,在传统应用中实现这一价值需要多长时间?代码很可能在Git仓库里躺上数月,才能被纳入“年度发布”,而即使用户获得了更新,他们也可能选择不立即升级。

分析

因为所有用户都集中通过一个Web应用访问服务,所以分析应用的使用情况变得非常容易。这可以指导业务部门做出明智的决策,优先升级应用中最常用的部分,并推迟对不太常用部分的工作。再加上易于升级和快速迭代的特性,这可以为用户带来巨大的价值提升,同时也应增加供应商的收入。

全球市场

有了SaaS,触达全球任何地方的客户的能力对企业来说是一个巨大的推动力。不再有因时区问题或销售代表未及时回复邮件而错失销售机会的情况。

能够接触到真正的全球受众,使一些公司成长为世界上最大的企业,规模甚至超过了传统的银行和石油巨头。这种市场准入也使成千上万的小公司能够在真正的全球化环境中蓬勃发展。

灵活的支付模式

提供SaaS的企业可以采用多种不同的支付模式,这使它能够吸引大大小小的客户,并从每个客户层级中获取最大价值。以下是一些常见的支付模式:

  • 分层定价
  • 免费增值
  • 免费试用
  • 按用户定价

安全性

SaaS应用通过用户登录来保护敏感数据和文件,这些数据和文件安全地存储在云系统中。在大多数情况下,这比将数据存储在本地服务器或用户机器上(如桌面应用)要安全得多。虽然将所有数据保存在本地网络中似乎比通过互联网发送到云服务器更安全,但事实往往并非如此。云服务商在保护其托管环境方面投入了巨大努力,这种安全级别通常是单个公司或单个桌面应用难以复制的。

这对开发过程有何影响?

理论上,构建SaaS应用的开发过程与任何其他类型的应用非常相似。但在实践中,作为一名SaaS项目的开发者,你必须注意一些细微的差别和注意事项。

频繁发布,尽早发布

SaaS应用没有“年度发布周期”。人们期望的是,功能被分解成可管理的小块,完成开发后,立即上线。如果你习惯了传统的发布周期,这需要一点心态上的转变。所有变更都必须是增量的,通常只包含在应用的一小部分中,并尽快发布。

这种将代码快速交到用户手中的心态,必须由自动化的CI/CD管道来支持,以便在没有过多手动干预的情况下构建和发布新代码。

虽然可以向部分用户灰度发布更新,以确保没有灾难性问题,但中小型SaaS应用更典型的做法是一次性将更新推送给所有用户。

测试,测试,再测试!

如果代码一次性发布给整个用户群,而且通常没有简便的方法回滚更改,那么你最好确保它能正常工作!

建立对代码质量信心的唯一方法就是对其进行充分测试。在“频繁发布,尽早发布”的心态下,这意味着自动化测试。虽然这不一定意味着要严格遵循TDD的教条,但这无疑是非常有帮助的。

你最好是全栈开发者

好吧,这并非绝对必要。我确信大型SaaS应用是由数据库、后端、前端等领域的专家协作开发的。但是,对不同应用层有深入的了解肯定会有很大帮助。

SaaS应用以一种近乎有机的方式在快速迭代和近乎即时的发布中“成长”,这意味着开发者至少需要具备跨层理解能力,例如,了解数据库中的一个决策可能会如何影响前端的实现。

了解你的用户

虽然团队中的每个开发者不一定都需要直接与用户交流,但整个团队了解谁在用你的产品、为什么用以及产品的核心价值在哪里,是绝对必要的。这些知识来自于对使用数据的分析,也来自于焦点小组、用户访谈等“软”方法。

这种理解应该通过用户故事深入到开发过程中。从开发者的角度来看,如果某个功能在焦点小组中反响不佳,或者用户访tam表明某个设计是错误的,这可能表现为开发方向的突然转变。在整个团队中,快速调整的能力至关重要。

对本书的期望

本章介绍了SaaS是什么,它从何而来,为什么企业和用户都喜欢它,以及作为一名开发者,你需要具备哪些能力来高效地构建SaaS应用。

在接下来的章节中,我们将深入探讨上述所有领域,重点是帮助开发者构建所需的工具和理解,以打造出用户喜欢使用、并且(希望)你自己也喜欢构建的优秀SaaS应用!

为了阐述所需的技术要点和理解,我们将从头开始构建、测试和部署一个全栈SaaS应用!

我以与构建应用时相同的心态来撰写这本书:我的目标是让阅读这本书成为一种引人入胜、有趣甚至“愉快”的体验。

我们出发吧!

如何评估和偿还技术债务

什么是技术债务?让我们从一个定义开始:技术债务是随着功能不断添加到项目中而累积的“债”。随着项目某些领域的复杂性增加,其他部分将不可避免地变得不再那么“适配”,在某个时候将不得不重构。然而,现实是产品必须按时交付,账单必须支付,因此,时间并不总是允许我们整理每一个角落。随着时间的推移,技术债务便开始累积。

所有项目都会经历的另一个技术债务来源是基础框架和技术的更新。升级一个主要版本通常并非易事,不幸的是,项目在过时的版本中停滞不前是很常见的,这本身就代表了技术债务。

技术债务的最后一个常见来源是用户行为的改变。在iPhone出现之前,很少有人通过移动设备访问网站。这种情况很快发生了变化,许多团队争先恐后地更新网站,以便在移动设备上正常运行。

所有技术项目都有一些技术债务——这是无法回避的事实。然而,在开发SaaS应用时,必须考虑到一些特定的注意事项。

大多数SaaS应用的理念是尽快将开发成果交到客户手中。这通常是通过广泛的自动化测试套件和CI/CD管道实现的。

与此形成对比的是,传统的交付机制在发布之间可能会有一年的间隔,并(希望)在这一年中安排一段时间来偿还技术债务。

随着SaaS开发中常见的“开发-发布-重复”的持续周期,时刻关注并管理技术债务变得至关重要。

评估和偿还技术债务的第一个也是最重要的方法,是让开发团队每周(或每个冲刺)都有一些时间来做“家务活”(housekeeping)。这些都是一些小的整理工作,否则可能会演变成严重的技术债务问题。开发团队总是最清楚技术债务在哪里的人——毕竟,他们很可能就是创造了这些债务的人!

静态分析是控制技术债务的另一个极其强大的工具。它可以在代码未运行时(静态时)检查代码质量,并可以检查是否遵循了编码标准以及是否实施了最新的最佳实践。

与静态分析类似,也应始终执行代码格式化(Linting),以确保代码风格符合团队约定。

如前所述,过时的依赖包可能成为技术债务的主要来源。虽然追求绝对的前沿技术可能有风险,但明显过时很少有好处。应该定期进行内务管理,以确保正在使用的任何包和框架都是最新的。

最后,应该进行自动化的性能测试,以确保应用的性能不会随着功能的增加和时间的推移而下降。

即使严格遵守上述所有要点,项目仍会随着时间的推移积累技术债务。对此我们无能为力。但通过上述的考量和缓解措施,技术债务对项目的影响,以及最终对公司盈利能力的影响,都可以降至最低。

小结

本章对SaaS的概念进行了广泛的介绍。我们回顾了应用开发的简史,并审视了在SaaS之前流行的范式。我们探讨了SaaS为何变得如此流行,并研究了其背后的技术、业务和以用户为中心的原因。最后,我们思考了作为一名SaaS开发者,需要哪些工具和技术才能卓有成效。

希望本章能让您对SaaS有一个坚实的基础理解,我们现在将在阅读本书的过程中对其进行扩展!

构建SaaS应用很有挑战性,但到目前为止,取得进展的最佳方式就是亲自动手开始构建!在下一章中,我们将直接深入本书将用于构建SaaS演示应用的工具、技术和方法!

更多阅读