一场家庭口角引起的系统重构分析

2 评论 4055 浏览 4 收藏 9 分钟

本文作者以一次家庭口角为切入点,将一家三口比喻为不同的系统,把家庭吵架的场景抽象到系统设计领域,对系统重构进行了分析,一起来看一下吧。

家里储物柜有个空间,里面放个药箱,药箱里有创可贴云南白药消毒水药棉纱布之类的东西。家里的每个人都知道这个柜门打开可以找到药,相信大多数人家都是这样的。

队友不小心割破了手,娇弱不胜,瘫倒沙发大声呼救:“儿子快来,给爸爸找点药!”

Simon闻言赶来,拉开柜门就问:“爸爸,拿啥药?”

“问你妈!”

“妈妈!妈妈!妈妈!爸爸要拿啥药?”

我本来在阳台收衣服,听到“问你妈”以及“妈妈(重复若干遍)”正没好气,进了房门,把干衣服一摔,叉腰就问:“你们俩大老爷们儿连个药都拿不出来了?你难道就不能把药箱拿出来给爸爸看看,让他选一种?非要等我?”

队友见我横眉怒目,放弃娇弱,小声嘟囔:“这也不是儿子的错……”

不过,钢铁直男Simon已经委屈得抽泣起来。

让我们先把哭鼻子的Simon放在一边,把这个场景抽象到系统设计领域来分析一下。

01 传统理念:孩子是父母系统的执行模块

假设爸爸系统为一业务核心系统,Simon系统为其子系统,功能为执行爸爸核心的业务指令,无法执行时,向妈妈系统通讯,由妈妈系统代为执行。

Simon系统小传:我是一个使用中心化逻辑的子系统。

我的处理逻辑是:爸爸给我输入了指令由我来执行,第一个指令是拿药。由于指令不清,我无法执行,于是我发出了疑问:“拿啥药?”接着,爸爸给我下达了第二个指令“问妈妈”,我也执行了第二个指令,但是执行失败,还被妈妈骂,我没有做错,我很委屈。

Simon的自然逻辑处理方式,在我们的很多业务系统设计上都有应用。即Simon子系统是爸爸系统的执行模块。input和output非常分明。但是问题出现在Simon模块在与妈妈系统交互时,妈妈系统报错,也就是俗称的“接口规范没定义好”。妈妈系统拒绝处理爸爸系统交代的事务。

不难看出,Simon子模块在此语境下,是爸爸系统中一个无法单独抽提出来的功能模块,因为他只执行。

一个只做执行工作的业务模块,永远无法成长为另一套核心系统,人也一样。而目前这个模块之所以这样,完全是由于爸妈系统之间的交互定义已经这样规定了,所以,我们必须进行重构。

02 去父母中心化的新系统:内生判断力

如果要重构Simon模块,提高内聚并降低耦合,就不得不考虑Simon模块与妈妈系统之间的交互规范。

毕竟,在Simon模块还是幼年的时候,妈妈系统是接受Simon模块的指令,并给予执行的。但随着Simon模块所配置的硬件越来越强,并且正在积累日益庞大的知识库,该模块应承担更多更复杂的功能并尽可能地减少将任务传导给妈妈系统。因此,爸妈系统之间的接口定义发生改变,将出现更大灰度,允许Simon模块在灰度间做更多事情。

首先,需要重新定义的是Simon模块的业务目标(注意,这是需求文档的第一章,很多人认为不重要,其实很重要)。

这个业务目标应该是,可以使用知识库独立处理较为模糊的业务指令,并对爸爸系统输入的指令进行修正和补充,尽量少地将无法处理的任务输出给妈妈系统。

不难看出,Simon模块正从一个简单的执行模块进行智能化升级。

其次,拥有了知识库的Simon模块,需要认识到自己正在向一个独立的业务系统迭代,而不再是爸爸系统的子模块,在这个过程中,会出现一些混乱,这是正常现象。例如:接收爸爸系统的指令之后,通过知识库分析后决定不执行,并在挨揍之后修正知识库;接收爸爸系统的指令之后,通过知识库分析后执行,其执行结果爸爸系统给予报错后,如何处理,等等。

有了这个基本思路之后,我们返回业务场景进行重构。

03 重构的本质也许是视角的改变

让我们再回到“拿药”这个场景中,升级视角来处理这个问题。

余不赘述,当Simon接收到“问你妈”这个指令时,需要动用知识库来分析这个指令。

第一步:侦测妈妈系统是否可用。侦测结果是,妈妈系统正忙,无法实时返回结果。

第二步:重新定义指令目标“拿药”,发现可通过“把药箱拿出来给爸爸选”这个方式达成业务目标,于是执行该决策。

显然,在这种处理方式中,Simon模块已经能够分辨出当前最主要的业务目标是”拿药”,“拿药”与“问你妈”是存在逻辑关系的,即“问你妈”只是爸爸系统对于“拿药”这个目标提出的一种解决方案,而不是与“拿药”相并列的另一个业务指令。能够分辨最高业务目标,与为完成目标而提出的解决方案,这是AI至今为止都很难企及的智能高度。

04 尾声&实操:人应该这样长大

如果我们要重构系统,那么必然系统在本次重构后,能执行一些和重构前不同的功能。给系统加功能不难,难的是这些功能加在哪个模块,为什么需要这个模块来执行而不是别的。

唯物辩证法讲物质决定意识。因此系统设计也类似人与人之间的关系变化,或人体内部的关系变化。当一个模块被赋予更多功能,或与其他系统的交互方式变得灰度更大时,我们要关注,这个模块的智能化升级,会造成外系统的一些错乱,要重构,就要把与之关联的外系统通通检查一遍,是否可适应这种变化,否则,重构是不可能取得成功的。

对于孩子其实是相同的道理,他们需要知道自己已被赋予更多自由度,也应该了解这些自由度代表着他们将对结果承担更多的责任。

本文由@echo回声 原创发布于人人都是产品经理,未经许可,禁止转载。

题图来自Unsplash,基于CC0协议

该文观点仅代表作者本人,人人都是产品经理平台仅提供信息存储空间服务。

更多精彩内容,请关注人人都是产品经理微信公众号或下载App
评论
评论请登录
  1. 爸爸说得对,确实不是儿子的错。人类语言的缺陷。后天训练不当,习惯性把指令和需求混为一谈。指令和需求明明是两个概念,非要变得模糊,容易产生误解。系统设计原则越简单越不容易出错。这种场景下,儿子只是爸爸的手,手只能等爸爸的大脑把药品信息传过来,此时又传来另一个指令,只是执行“问妈妈”指令,让妈妈系统抛出异常了。要优化的是大人,把问题描述清楚,让孩子独立思考解决问题。

    来自江苏 回复
  2. 提炼为一句话:发现用户真实的需求,以最小代价执行。

    来自四川 回复