关于建模
最近跟同事讨论建模的思路,举了两个case,然后总结了一下关于建模的一点思路。
Case1: 物流订单
第一个case关于订单,在做物流系统的时候,抽取了一个物流订单模块,该模块的核心的功能就是管理物流订单。在创建物流订单的时候,就在想,物流订单包括哪些属性?为什么这个字段(例如,发货时间,收获仓库)可以放在物流订单这个模型里面?
可以简单的说,我们的系统需要这个字段,比如,我们需要收获仓库来进行收获,但这触及不到本质,因为如果只是简单这么想,那凭什么收获人的角色需要放在物流订单模型里面?或者为什么收获人的角色不能放在物流订单里面?所以问题的本质还要去思考:物流订单这个本质是什么?
认真思考下去,其实,订单的本质就是一张契约,类似于线下交易的合同。物流订单就是订单在物流场景下的一个特殊场景。如果从这个角度思考,物流订单模型应该包括哪些属性,就要去看现实中一个物流的合同需要包含哪些属性?比如,一个合同里面要有运输车辆的类型,但契约不会包含需要加什么油,这就决定了物流订单模型应该有哪些属性。
Case2: 资产模型
另外一个Case就是最近在梳理我们单车的资产模型。遇到一个字段:资产的调入城市,这个字段是否要纳入资产模型里面。如果单纯从资产觉度看:明显不需要。因为单纯这个资产模型,包括车头,车锁,但本身没有调入城市这个属性。
确实,调入城市不是单车资产的本身属性;但再仔细想想,单车资产里面的生产厂家,也不是单车资产的本身属性,那为什么“生产厂家”就作为单车资产的属性呢?
可以从两个角度来看模型:一个是物理视角,这个视角关注模型所代表的现实物理对象,是最经常使用的一个思路;另一个是社会视角,以前建模基本是从功能上去想,但没有意识到本质上是社会视角,就跟给一个运维人员建模型,性别,年龄是物理属性,那职级,身份,就是社会属性。
从这个维度看,资产的掉入城市其实是社会属性,但这个社会属性是不是要纳入单车模型,还需要看“社会”上谁关注这个属性,也就是说,对于社会属性,要更多的是从模型的社会视角,从对它打交道的人的视角,去思考是不是模型的一部分。
关于建模
把上面两点总结了一下建模的一个“模型”:
首先,可以两个维度建模:
实体模型:
这一类最常见的建模思路,比如,仓库模型,人员模型等等。对这一类模型建模的时候,一定要从两个视角去看:
- 物理视角:从物理视角去梳理物理属性
- 社会视角:从“社会意义”这个视角去思考一个实体所应该具备的社会属性。在梳理社会属性的时候,不要埋头自己想,也不要盯着需求文档去想,要真的去“社会”中观察实体所表现的社会属性,或者去跟我们的业务方交流,因为,他们是在社会中跟实体发生作用的人,他们才真正的了解实体的社会属性。
虚拟模型:
对于虚拟模型,例如,订单,不要以为是虚拟模型就凭空去想,一定要锚定一个实体模型,这样,对于虚拟模型建模的时候,也可以从物理和社会两个视角去建模,而不是真的凭空想。