系统设计经验

2020-05-25  本文已影响0人  万福来

系统设计经验

系统架构说明

遇到的设计难题

DDD领域驱动设计

传统方式则由底层DB模型到顶层服务接口开始设计;
领域驱动设计由顶层领域模型置底开始设计。
领域 -> 多级业务子域 -> 领域服务 -> 领域能力 -> 领域能力扩展点
系统 -> 多个子应用 -> 服务接口 -> 服务方法 -> 对外暴露扩展接口
示例:
商品系统 -> 商品详情页 -> 商品详情服务接口 -> 查询商品基本信息 -> 根据扩展接口实现自定义查询字段
领域能力中的实现是中台提供的水平业务能力组件,可以供各个业务方直接使用。
领域能力扩展点由垂直业务方实现,当一个能力扩展点被多个垂直业务方都使用时,可以沉淀为水平业务能力,设置为默认实现,减少垂直业务方的配置。
这样可以通过复用中台的水平业务能力组件实现业务的快速开发,通过领域能力扩展点实现各业务方的差异化能力。
每个叶子域下会有多个领域服务,所谓领域服务,就是指各个领域能对外提供的原子性的业务逻辑,比如库存查询服务,扣减库存服务。领域服务和JSF接口有明确的区别,领域服务属于领域建模的概念,是描述中台内部业务逻辑的手段;JSF接口是技术实现方式,会对领域服务做编排、聚合后暴露给业务方进行调用。
领域服务负责实现业务逻辑,并编排领域能力,一个领域服务由多个领域能力支撑,一个领域能力能支持多个领域服务。
领域能力是PaaS化业务建模体系中描述核心逻辑最细粒度的概念,一个领域能力可以映射到一组相关扩展点的集合。中台在定义扩展点时会将一个业务场景需要同时定制的扩展点聚合在一起,前台业务可以根据领域能力来索引这些扩展点。领域能力必须有扩展点,否则会出现随便定义的情况。
领域能力的一些业务策略,不同业务有不同的需求,这种因业务而异、无法确定的逻辑被定义成扩展点,由前台业务自行设置。
比如订单取消服务(领域服务),由订单状态判断、订单有效期判断等多个领域能力支撑,其中订单有效期面对秒杀、预售、手机充值等不同业务场景会有不同的有效时间,这个有效时间可以做成一个扩展点:订单有效期,由前台业务进行定义。
扩展点有版本概念,业务包一般基于一个版本开发,所以扩展点的升级需要做到多版本兼容,降低前台研发使用成本。扩展点就是SPI,只是传统的SPI没有业务身份的概念。

上一篇下一篇

猜你喜欢

热点阅读