文档即编码(二):信息树(一)
如从信息的角度看,业务是信息,而设计文档与代码都是业务此信息的载体。
那么我们是否可以从信息的角度对软件进行设计,将业务需求转变为此业务需要哪些信息,生产哪些信息,这些信息需要提供给谁进行消费。这样一来,可将软件简单的抽象成一个信息加工厂,信息就是各种原料、各种零部件、各种产品。且这种方式适用于所有业务或系统,因为不管什么业务或系统其本质就是信息的集合。
以下本人会介绍适用于软件设计的一种信息树模型,通过此模型可以做出满足业务并可编写出高质量代码的设计。
以下会通过BOSS系统中的用户模块为例,对信息树进行说明,请看下图:
在上图中,从左到右描述的是与用户相关的所有信息,以及这些信息如何生产、消费:
(1) 首先当我们生产一条用户新增操作信息时,需要消费一条输入信息(对应图中的Input)
(2) 新增成功后,需将为此新增信息生产开户信息(Produce:用户开户信息)
(3) 而生产开户信息的方式是将此而用户状态设置为0
(4) 之后我们需要为某用户生产一条用户**信息,而生产用户**信息需要消费此用户的开户信息,即此用户的状态是否为零。当生产此用户的**信息后需自动生产此用户的有效信息
(5) 而有效信息则只是**信息的一个映射
(6) 再之后如为某用户产生一条停机信息,则需要消费此用户的**信息,且在之后生产一条相应的无效信息(同用户有效信息)
在上述的信息树种将所有的逻辑判断、流程、数据赋值都转化为了信息的生产、消费问题,且其一目了然,无任何歧义,而且你会发现,当信息树完成后,其实已经完成了大部分的编码工作。
此与UML的设计方式相比较,信息树只需一张图即可将所有业务描述清楚,且如业务发生改动,则只需对以上的信息树稍作调整即可,并且其信息树有着简单易懂的特点,无论业务、设计、开发、测试人员都可以都轻易读懂。而且通过信息树,即使菜鸟级的开发人员也可以轻易的写出checkEffectiveUser()方法,真正做到了好的设计即是高质量的代码。
总结:
信息树是从信息角度出发,对系统进行设计,其主要阐述以下两个问题:
(1) 需要生产哪些信息
(2) 所生产的信息需要消费哪些信息
使用信息树对系统进行设计时需注意:
(1) 不需把系统中的所有信息列举,只需关注最核心、最复杂的业务,否则会造成信息爆炸
(2) 如某信息的生产与消费不是直接由用户发起(即输入或查询),则此信息必定被一信息生产,被另一信息消费
(3) 信息的生产方式既是此信息的唯一标识方式