前言:该篇为bpaas开发过程中整理出来的流程及遇到的一些问题,目前已成功落地,该文章为初稿,如果有什么不太理解的地方,可以留言沟通。
这是一个基本流程图,之间的交互细节会在之后详解。
这里需要知道的几点:
1.层级的划分
2.都经过了哪些流程
3.对象何时进行了转换
4.建立一些模糊的概念
做bpaas化系统首先要做的就是划分领域模型,将不同的内容划分到不同领域模型里面。
比如:
商品域、价格域、类目域、租户域等等
划分子域,划分好域之后,需要对领域进行细化,将商品域划分成多个子域:sku商品域、门店商品域、商品标记域、商品关系域等等。
需要注意的点:
如果有内容定位不到该属于哪个域,就需要头脑风暴,最终讨论归属到哪个域合适。
比如:
商品域里面的门店商品,到底是归属门店商品域还是商品域还是门店域
定义完领域子域后需要定义的是领域服务,领域服务就相当于一个个接口。
比如:以一个商品写领域服务来说,里面包含了新建商品领域服务、修改商品领域服务等等,是一个完整的服务。
领域能力和领域服务不同的是,领域服务是领域能力聚合后的产物,每个领域能力都可以抽离出来去聚合其他的领域服务。
比如:
一个新增商品领域服务里面可能包含了入参校验领域能力、业务参数校验领域能力、构建入参领域能力,新增product领域能力、新增sku领域能力等等。
每个领域能力都对应一组扩展点实现,每个扩展点的出入参数、方法名都是固定的。更像是一个接口对应了多个实现类。但里面有一个需要注意的地方,就是通过身份标识来确定进入到哪一个扩展点里面。
场景是针对于扩展点的,对不不同场景的业务,要走不同的扩展点。
有一些复杂的场景,比如入参只有一个类目id,需要查出来它的信息才去调用商品新建的能力,这时就需要有构建的能力,将类目信息构建到商品对象中进行新建操作。但如果有业务身份不需要类目构建呢,那就需要场景图这个场景,来区分到底走哪一个构建能力里面。
每个节点基本上是对应一个领域服务,节点将流程中的对象解析成了领域对象,用来调用领域能力。
一个流程对外来说就是一个api,内部实现是通过多个节点组合起来的,
比如,一个获取商品详情的api里面涉及到的节点可能有:查询品牌节点、查询类目节点、查询广告词节点、查询商品节点,经过流程编排将这些节点聚合到了一起。不同的业务身份可能需要的节点不一样,有的可能没有广告词这个节点,就不需要将广告词节点放在编排流程。
应当于saas化系统中租户的概念,不同的租户之间可能有微小的差异性,通过业务身份进行不同的流程编排和进入不同的扩展点来解决差异性问题。
基础设施层主要是放一些中间件和rpc:中间件如es、redis、db。
核心包中有流程编排、节点、领域服务、领域能力、定义领域对象bo。
水平包是在核心包外层的一个包,里面是一些扩展内容,主要有扩展点。
垂直包相对于水平包来说,是只有一部分特有业务才需要的业务流程的话放在这个包内,主要也是扩展点。