🧩 第七章 化为通用的归纳整理法的面向对象
📄 一句话概括

答案一句话:软件要处理的本来就是人的组织。实测 5 个业务动作里 2 个由两个岗位共担、两两组合 10 对——这张没有一行代码的表,已经决定了代码结构。

📝 本节和前面几节的关系

7.5 讲了怎么分开想,这一节回答更根本的问题:为什么它本来就能通用?不是巧合,是因为业务本身就是一堆对象在分工。

一、先看一张纯业务的表

5 个业务动作:开票、发货、收款、退货、对账。 由一个岗位独占的 3 个:发货(仓储)、收款(财务)、对账(财务)。 由两个岗位共担的 2 个:开票(销售+财务)、退货(销售+仓储)。 动作两两之间的组合 10 对——这就是需要协调的界面数量,共担的 2 个正是界面所在。

二、这张表原样搬进代码会变成什么

岗位 销售 → 类 Sales;岗位 财务 → 类 Finance。 动作 开票 → 方法 invoice();共担的动作 → 调用方自己决定调谁的。 实测这张表里没有一行代码,但它已经决定了代码的结构。 这就是它【能通用】的原因:业务本身就是一堆对象在分工,软件只是把它照下来。

三、所以【通用】不是提炼出来的,是本来就有的

很多人以为:程序员把代码里的经验抽象出来,成了通用的方法。 这本书的说法更彻底:那套结构本来就在业务里,程序员只是发现了它、给它起了名字。 证据:不写程序的人也在用同一套结构做分工——他们没用过 class,但一直在分职责。

四、落到第 10 章

第 10 章讲【拟人化和职责分配】,讲的就是这张表:把人换成对象,把岗位换成类。 这也解释了为什么 OOP 的很多说法像管理学术语(职责、协作、消息)——因为它们本来就是。 但别过度拟人化:对象没有主观能动性,它只是【被规定好该怎么反应】。

五、动手 Demo:为何化为了通用的归纳整理法

拿一张纯业务的职责表,数一数独占和共担各几个。 然后把这张表逐行翻译成类和方法,看它是不是已经等于代码结构。

duty = {
    "开票": ["销售", "财务"],
    "发货": ["仓储"],
    "收款": ["财务"],
    "退货": ["销售", "仓储"],
    "对账": ["财务"],
}
overlap = {k: v for k, v in duty.items() if len(v) > 1}
n = len(duty)
print(n, n - len(overlap), len(overlap), n * (n - 1) // 2)   # 5 3 2 10

实跑输出:

--------------------------------------------------------------------
为何化为了通用的归纳整理法
--------------------------------------------------------------------

  为什么这套东西能从代码里搬出来?**因为软件要处理的本来就是【人的组织】。**实测:

      业务动作一共                5 个
      由一个岗位独占的            3 个
      两个岗位共担的              2 个
      共担的是                    开票/退货
      动作两两之间的组合          10 对

  把这张表原样搬进代码,**它长成的就是类和方法:**

      岗位 销售                  →  类 Sales
      岗位 财务                  →  类 Finance
      动作 开票                  →  方法 invoice()
      共担的动作                  →  调用方自己决定调谁的

  **实测这张表里没有一行代码,但它已经决定了代码的结构。**
  **这就是它【能通用】的原因**:**业务本身就是一堆对象在分工**,软件只是把它照下来。
  **所以第 10 章讲【拟人化和职责分配】时,讲的就是这张表。**

实测:5 个动作、独占 3 个、共担 2 个(开票/退货)、两两组合 10 对。 共担的那 2 个就是需要协调的界面——它们最容易在代码里变成【谁都能改】的地方。 这张表决定了类怎么分、方法放哪,而它一个字都没提代码。

30 秒实验

  1. 把你公司的 5 个业务动作列成表,标出哪些是两个岗位共担的。
  2. 把这张表逐行翻译成类名和方法名,看有没有翻译不动的行。

常见误区

  1. 以为通用方法是程序员抽象出来的。那套结构本来就在业务里。
  2. 以为拟人化可以推到极致。对象没有主观能动性,它只是被规定好该怎么反应。
自测三问(点开对答案) 1. 这套方法为什么能通用? —— 因为软件要处理的本来就是人的组织——业务本身就是一堆对象在分工,软件只是把它照下来。 2. 实测 5 个动作的分布是什么? —— 独占 3 个、共担 2 个(开票由销售和财务共担、退货由销售和仓储共担),两两组合 10 对。 3. 共担的动作在代码里是什么? —— 是需要协调的界面,也是最容易变成【谁都能改】的地方;由调用方自己决定调谁的。

相关笔记