如果单纯的做一个画面,其实是不需要什么业务知识的,因为知道长什么样子就好了。而事实上,当一个程序完成的时候,任何画面都不是孤立的,和其他画面有若干联系。理清楚画面之间的联系,就是流程分析的内容。
而设计流程,则需要了解业务逻辑。
业务逻辑的分析,可以从业务概念入手。理清楚业务概念之间的联系就是业务分析。当然业务模型是不断的进化的,业务概念也会随着不断的演进。
一个产品,市场上可能很多人都在做。除了价格和成本外,差异化是有效的竞争手段。而差异化会给产品带来丰富的特性,这就是为什么同样是理财产品,每家都有不同的展示方式。差异化为不同的产品带来丰富的特性,这些特性形成了业务上的概念(一些名词)。
PM 通过分析和数据计算,设计自己的产品,在通用的基本业务概念上,扩展自己的内涵。这样我们的产品模型会独一无二。而且随着行情的变化,会做出不同的调整。因此,产品是日日新,业务是日日新,设计是日日新。
设计和业务是共同进化的。
那么,产品的进化: 产品属性 --> 市场考验 --> 差异化属性 --> 市场考验 --> 差异化属性 --> .... 注意这里的差异化,不仅仅是加法,还可能是减法
为了支持产品的进化: 业务概念 --> 衍生新概念
业务概念 --> 分拆概念 业务概念 --> 合并概念
业务概念变化了,业务流程会衍生很多的分支或者根本性的调整。因为业务流程是基于业务概念的。
为了支持业务流程的进化: 业务概念不是孤立的,和其他业务概念有千丝万缕的联系,和程序代码对应起来: 业务概念 --> 数据对象 - 数据结构 - 数据结构隐含行为 - 与其他数据结构的链接 - 考虑到前端,数据结构的表现形式
组装数据对象就是一个画面,组合不同的画面就是流程设计。
业务概念组成了业务流程。当我们描述业务流程的时候,常常说,当XXX的时候就xxxx样。业务流程的驱动离不开一些业务概念。
一个画面不仅包含一个的数据对象,还有此数据对象链接到得一些对象,有了这些对象,画面内容丰富起来。当我们描述页面流程的时候,常常说,当点击某个按钮,或者查询的数据是某个值的时候,就xxxx样。画面的驱动,离不开UI的交互和数据状态。
对应到数据对象,当某个数据对象发生了某个行为,或者其某个属性是某个值的时候,可以做某些行为(比如说,按钮可以点击);而当触发此行为的时候,又会引起此数据对象,或者另外一个数据对象的某个属性的变更。行为发生以后,需要记录此行为发生的影响,那么需要改变某个数据对象的属性。因此程序运转的本质是,数据对象的在不同的状态之间来回的转换。状态就是数据对象某刻的属性集合,这些属性发生变化的时候,就说状态在不停的变化。
当我们做流程设计的时候,梳理画面之间的跳转关系,其出发点就是画面包含的数据对象的状态。对与前端来说,数据对象的比较小,可以对应到某一个模块,画面包含多个模块,所以接口可以选择性的组合不同的数据对象。
如果数据对象的设计和业务概念对接补上,当业务调整的时候,就需要大规模的重构,甚至推导重来。这中间会浪费掉大量的时间。这就是接口设计的重要性,和业务分析的重要性。打补丁式的重构,只能解一时的痛,最终会将整个程序推上不归之路。
想清楚整个的运作过程,再看如何进行业务分析和流程设计,就很清楚啦。业务分析要理解业务概念,并理清楚业务概念之间的关系。流程设计要做好业务概念和数据对象之间的映射。