分治法
让我们来探讨分治策略的优势。
概述
本章将分析一组被称为“整洁架构”(clean architecture)的软件设计原则。但在深入探讨这些原则的具体实现(这也是本课程的核心内容)之前,我们需要更深入地理解整洁架构的系统结构及其组成部分。
一个设计良好的系统的主要目标之一是实现可控性。从这个角度来看,软件系统与工作场所(例如办公室或工厂)并无本质区别。在这些环境中,工作人员通过交换数据或物理对象来创造或交付最终产品,可能是实物,也可能是服务。员工需要信息和资源来完成工作,但最重要的是,他们必须对自己职责有清晰的认识。

在我们的社会中,我们重视主动性和创造力。然而,对于机器中的各个组件(比如软件系统),我们并不期望它们能做出任何超出设计时明确规定的行为。软件本身没有生命,尽管近年来人工智能取得了令人瞩目的成就,但它仍无法展现出人类那样的自主性或主动性。

无论我们对人工智能持何种观点,我们都可能认同一点:如果系统的各个组件职责明确,整个系统就会运行得更好。无论是软件系统还是我们自身的社会组织,当某个组件可以做什么、必须做什么不够清晰时,总会带来风险,因为影响范围和控制区域自然会产生重叠,进而引发各种问题,从简单的效率低下到完全的死锁都有可能。
提升系统秩序与控制能力的一个有效方法是将系统划分为若干子系统。关键在于,在这些子系统之间建立清晰且明确的边界,以规范数据的交换方式。这实际上是政治上“分而治之”策略的延伸:管理一组小型且相互关联的系统,远比管理一个庞大复杂的整体更容易。
机器的本质
在我们之前“数据流”一课所设计的系统中,每当某个组件被调用时,它期望接收的数据总是明确的,同时也不允许(或根本不可能)以破坏系统结构的方式进行数据交换。
我们必须记住,软件系统并不等同于工厂或办公室。每当讨论机器时,我们必须同时考虑它在运行时的行为方式,以及在开发过程中如何构建和修改。原则上,计算机并不关心数据来自哪里或去向何处;但人不一样——作为系统的构建者和维护者,人们必须对数据流动路径有清晰的理解,才能避免引入缺陷或影响系统性能。