设计模式中的“万一”和“有限责任”
吴旻
泰岩网络工作室
和同事讨论一个设计方案。其中的A类负责调度,B类负责数据输入,C类负责数据输出。问题的焦点在于,A类需要知道B和C的健康状态,那么是由A自己记录B和C的状态,还是由B和C向A报告其健康状态呢?
同事的意见倾向于A自己保存B和C的状态,理由之一是“万一”B和C不能正确返回状态的话,A将不能进行正常的调度工作。
同样的“万一”理由,他倾向将一些临时数据作为类成员变量保存下来,理由是调试的时候有可能用到。
我把同事的设计风格比喻成“家长制”。“家长制作风”在中国有几千年的传统,一句话就是“包办”,替小孩子做什么,事情或者决定。我家小孩不到5岁,每天早上起来有人给穿衣,有人给端水,有人给洗脸,有人给拿尿盆。如果想到“万一”有点风险,那就一切禁止,看死你:不许跑,不许爬高,不许淘气,不许……当然,也有一大堆必须:必须听话,必须多吃点,必须多穿点,必须……
家长的压力很大,必须是全能选手,要不然肯定完不成这么多事情。孩子也会越活越痛苦,生命的快乐有相当一部分来自对未知领域的探索,有什么能比不停的压抑自己这件事情更痛苦呢?
目前已知的比较有效的经济模式是“市场经济”。市场经济事实上是高风险的,因为破产和倒闭是随时可能发生的。比如说某家企业通过合法方式获得了银行借款,但由于经营问题而破产,最终导致银行无法收回贷款。企业的风险除了破产外,是需不需要企业家倾家荡产来还贷款;银行的风险在于,不能收回贷款,会不会导致银行产生经营问题。
市场经济为我们提供了良好的模式:成立有限责任公司。这样,企业破产仅限于企业财产,而不需要企业家倾家荡产;银行也会据此评估贷款无法收回可能产生的影响,从而做出合理的贷款规模与贷款管理方式。
感谢市场经济的有限现任模式,最终让我说服同事摆脱使用“家长制”的大包大揽方式,并最终采用各司其责,分工协作的设计方案。
总结一句:应对“万一”的办法,是采用“有限责任”模式。