加油网络平台之业务架构

要设计加油网络的业务架构,首先要了解加油网络的业务模式,这个可参考之前的文章<加油网络,想清楚这几点才是关键>。软件架构设计的核心是建立业务模型,模型分为核心模型,辅助模型,通用模型这几种。要想设计复用性高,扩展性强的系统,我们需要从下面这几方面来考虑。

软件系统=模型+关系。

软件系统组成

软件系统的设计从工程性角度看,可以拆分为模型、关系两部分。

模型由数据和业务逻辑组成,是以数据为核心,业务逻辑围绕数据做进一步加工,方便对外使用。加油网络设计上,“油站”是核心模型,如果设计SaaS的话,进销存是核心模型。油站模型设计时,要在以下方面注意:1、数据的全面性,要包含油站业务域的所有数据,这包括油站基础数据,价格数据,设备数据,发票数据,通道数据。2、功能的全面性,包含油站增删改,业务规则校验,状态、生命周期管理等。

模型设计的关键是边界清晰,粒度适中。加油网络的模型拆分如下,核心模型:油站。辅助模型:油站价格,油站设备,油站发票,通道数据。通用模型:渠道商户,用户,订单,支付,营销。特别要强调的是,因平台运营的重点是tob方向, 所以渠道商户模型可以说是,系统的第二个核心模型。

关系是指模型之间的协作方式,实质体现的是模型的组织结构。模型间依赖关系的设计重点是,“简化依赖的方向和减少依赖的数量”。

依赖方向设计上,要采用单向依赖的分层结构,这样的设计是结构化的也能和业务流程对齐。本质是逐层隔离变化点,把需求的影响降低到最小。

依赖数量设计上,可采用聚合模式,相同定位的模型聚合在同一个层里面,这样从整体看就是层与层之前的依赖了,这样,从人理解业务的角度,依赖的数量大幅度地减少了。

下面是一张 MVC 分层结构图,可以看到,系统总体上是非常清晰的层次结构。

系统分层结构

清楚了系统的组成后,我们再看下业务流程和模型的关系。

业务流程不能用于模型拆分

业务流程产生于用户原始需求的收集,每个业务流程由业务步骤组成,每个业务步骤分为输入、业务操作、输出三部分。

比如,一个典型的一键加油流程,它包含油站选择、油品选择、下单、支付等步骤。其中,下单步骤的输入,就是订单的各种信息,下单的业务操作,就是整合这些信息,创建一个具体的订单,而下单的输出结果,就是新创建的订单。

加油业务流程

是不是可以按照业务流程来划分系统模型?答案是不可以。

每个业务都有其本身的专业性,比如加油业务、订单业务、支付业务,它们的数据模型和业务逻辑都相当复杂,都是相对独立的业务领域。如果我们是按照业务流程来划分系统模型,结果是把不同业务混在了一个模型里了,所以,这种模型划分的方式并没有降低总的业务复杂度。

我们可以按照业务域来拆分系统,首先需要先把所有的业务流程拆散,这样得到了一堆业务节点,然后,把业务节点进行归类,相关的业务节点放在同一个系统模型里。判断节点是否相关,主要看它们是否属于同一个业务领域,比如一个油站查询的节点,和油站创建的节点,它们都属于油站域,那么这些节点都可以归属到同一个油站模型里。

下图就清楚地展示了系统模型按业务流程拆分,和按业务域拆分的不同。

按照业务流程和业务域拆分系统

基于业务领域,拆分了系统模型后,就可以按照这样的方式还原整个业务流程,比如上面的一键加油流程,就可以这样还原它:

一键加油流程 = 油站模型. 油站列表 + 油站模块. 油站信息 + 订单模块. 创建订单 + 支付模块. 支付

加油网络系统架构说明

我们既然知道了系统=模型+关系,也知道了不能按照业务流程来拆分系统。下面我们就可以来设计加油网络的业务架构了。业务架构的目标是系统的高复用性和高可扩展性。

加油网络之业务架构

从上面的架构图可以看出,在业务架构上,我们首先做了一键加油、加油券、车主平台服务业务线等垂直方向的业务拆分,了解了每条业务线的流程后,我们再次按照业务域进行了水平拆分。这样我们就得到了一个二维的模型矩阵,每个模型既属于某个业务线,也属于业务流程的某个环节。这样一来,每个模型的职责都很清晰,当业务变化了,我们可以清楚地知道,这个变化涉及哪些模型,然后,对这些模型进行相应的调整就可以。

高扩展性设计上,我们把业务平台和业务线剥离开,让业务平台封装基础业务的功能,这样,它就变得相当地稳定,各个业务线包含自己的个性化需求,业务线只依赖业务平台,业务线彼此之间互相独立,可以自由变化。这样的业务架构设计,就同时保证了系统的相对稳定和业务的高扩展性。

比如,加油网络会在B端业务上对接多条业务线,因而对系统扩展性要求比较高,要能快速对接新业务并且还能保证系统的稳定,故而,我们架构时要单独做B端业务模型的设计,提供基础的商户、价格、策略、Open API等服务给上层,这样把业务需求内敛到B端业务模型内,做高内聚的模型。

在高复用性的实现上,我们在拆分完系统模型后,把业务线需要的相同需求提取出来,放到基础平台。比如,油站信息,订单信息,支付信息等。同时,我们可以尝试把一个业务域按照层次拆分得更细,比如,把价格模块拆分为多个上层价格模块和一个基础价格模块,这样,基础价格模块对于所有类型的价格,都能够提供复用。

基础平台的内部服务之间是正交关系,它们处于调用链的底层,服务之间不会有任何的调用关系。比如说订单服务和油站服务,它们代表不同维度的基础业务域,彼此之间不会有调用关系。

比如,订单明细里包含油站 ID 信息,但订单服务内部不会调用油站服务来获取油站详情。如果页面需要展示油站的详情,针对这个具体的业务场景,我们可以在上层的聚合服务里,通过聚合订单服务和油站服务来实现。

总结,加油网络业务架构的设计,首先是,按照业务域先纵向再横向拆分系统模型,然后,追求的是高扩展性和高复用性的设计目标。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,056评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,842评论 2 378
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,938评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,296评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,292评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,413评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,824评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,493评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,686评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,502评论 2 318
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,553评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,281评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,820评论 3 305
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,873评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,109评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,699评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,257评论 2 341

推荐阅读更多精彩内容