电商系统的核心流程是什么样的?

遵照软件工程的一般规律,我们先从需求阶段开始。如何来做需求分析?理想情况下,应该由系统分析师或者是产品经理来承担这个任务。但现实很骨感,绝大多数情况下,你得到的所谓的“需求”,就是一两句话。需求分析的工作实际上就落在了开发者身上。

开发者怎么来做需要分析?不要一上来就设计功能,而是要先来回答下面这两个问题:

  • 这个系统(或者功能)是给那些人用的
  • 这些人使用这个系统来解决什么问题。

这两个问题的答案,是业务需求。对于电商系统来说:

  • 首先得有买东西的人,即“用户”,目的是买东西
  • 还得有卖东西的人?即“运营人员”,目的是卖东西
  • 还有什么人会用这个系统?老板啊,需要在系统中看到他赚了多少钱


这个图在 UML(统一建模语言)中称为用例图(Use Case),是需求分析的时候你需要画的第一张图。它回答的就是,业务需求中的那两个关键的问题,这个系统给谁用?他们用这个系统解决什么问题?

一般来说,业务需求和我们要设计的系统关系不大。为什么这么说呢?你可以看一下上面这个图里面的用例,放在传统的商业企业里面,比如一个小杂货铺、一个线下实体商场商店或者一个做电视购物的公司,是不是也是适用的?所以做业务需求的主要目的,是理清楚业务场景是什么样的。

然后我们来分析电商系统的流程。显然,一个电商系统最主要的业务流程,一定是购物这个流程:

如何根据流程来划分功能模块?

接下来,我们把这个业务流程再细化,看一下电商系统如何来实现这个流程?细化后的流程可以用一个时序图表示:

  • 用户开始浏览商品,需要有一个商品模块来支撑,给用户展示商品的介绍、价格等等这些信息。
  • 用户把选好的商品加入购物车,这个步骤,也需要一个购物车模块来维护用户购物车中的商品。
  • 用户下单肯定需要一个订单模块来创建这个新订单。订单创建好了之后,需要把订单中的商品从购物车中删除掉。
  • 订单创建完成后,需要引导用户付款,也就是发起支付流程,这里需要有一个支付模块来实现支付功能,用户成功完成支付之后,需要把订单的状态变更为“已支付”。
  • 之后运营人员就可以发货了,在系统中,发货这个步骤,需要扣减对应商品的库存数量,这个功能需要库存模块来实现,发货完成后,还需要把订单状态变更为“已发货”。
  • 最后,用户收货之后,在系统中确认收货,系统把订单状态变更为“已收货”,流程结束

这个流程涉及到的功能模块有:商品、购物车、订单、支付和库存,这几个模块就是一个电商系统中的核心功能模块。

当然,仅仅有这几个模块还是不够的,因为我们只分析了“购物”这个最主要的流程,并没有完全涵盖业务需求中的全部用例,比如:运营人员进货、老板查看报表这些用例还没有覆盖到。

相比购物这个流程,剩下的几个用例和流程都没那么复杂,用同样的方法就可以把其他功能模块分析出来。在这里我们就省略分析过程,直接给出我们电商系统的功能模块划分:、


上面这个图,我使用的是 UML 中的包图 (Package Diagram) 来表示。整个系统按照功能,划分为十个模块,除了购物流程中涉及到的:商品、订单、购物车、支付、库存五个模块以外,还补充了促销、用户、账户、搜索推荐和报表这几个模块,这些都是构建一个电商系统必不可少的功能。我们一个一个来说每个模块需要实现的功能。

  • 商品:维护和展示商品信息和价格。
  • 订单:维护订单信息和订单状态,计算订单金额。
  • 购物车:维护用户购物车中的商品。
  • 支付:负责与系统内外部的支付渠道对接,实现支付功能。
  • 库存:维护商品的库存数量和库存信息。
  • 促销:制定促销规则,计算促销优惠。
  • 用户:维护系统的用户信息,注意用户模块是一个业务模块,一般不负责用户登录和认证,这是两个完全不同的功能
  • 账户:负责维护用户的账户余额。
  • 搜索推荐:负责商城中,搜索商品和各种列表页和促销页的组织和展示,简单的说就是决定让用户优先看到哪些商品。
  • 报表:实现统计和分析功能,生成报表,给老板来做经营分析和决策使用。

这里面需要特别说一下促销模块,它是电商系统中,最复杂的一个模块。各种优惠券、满减、返现等等这些促销规则,每个都非常复杂,再加上这些规则叠加计算,常常是复杂到连制定促销规则的人都搞不清楚。

所以每个电商公司无一例外都爆出过,因为促销规则制定失误,而产生非常便宜的“羊毛单”,让精明的消费者薅了“羊毛”。不过五花八门的促销是提升销售最有效的手段,肯定不能因噎废食。

作为系统设计者,我们需要把促销的变化和复杂性封禁在促销模块内部,不能让一个促销模型把整个电商系统搞得非常复杂,否则很难去设计和实现。

可行的做法是,把促销模块和其他模块的接口设计的相对简单和固定,这样系统的其他模块就不会因为新的促销方法而改变

在创建订单时,订单模块把商品和价格信息传给促销模块,促销模块返回一个可以使用的促销列表,用户选择好促销和优惠,订单模块把商品、价格、促销优惠这些信息,再次传给促销模块,促销模块则返回促销价格

最终生成的订单中,只记录订单使用了哪几种促销,以及最终的促销价就可以了。这样,不管促销这个模块怎么变化,订单和其他模块的业务逻辑不需要随之改变。

电商:电商系统是如何设计的相关推荐

  1. Java生鲜电商平台-促销系统的架构设计与源码解析

    Java生鲜电商平台-促销系统的架构设计与源码解析 说明:本文重点讲解现在流行的促销方案以及源码解析,让大家对促销,纳新有一个深入的了解与学习过程. 促销系统是电商系统另外一个比较大,也是比较复杂的系 ...

  2. Java生鲜电商平台-电商会员体系系统的架构设计与源码解析

    Java生鲜电商平台-电商会员体系系统的架构设计与源码解析 说明:Java生鲜电商平台中会员体系作为电商平台的基础设施,重要性不容忽视.我去年整理过生鲜电商中的会员系统,但是比较粗,现在做一个最好的整 ...

  3. 电商:购物车系统应该如何设计

    首先,我们来看购物车系统的主要功能是什么.就是在用户选购商品时,下单之前,暂存用户想要购买的商品.购物车对数据可靠性要求不高,性能也没有特别的要求,在整个电商系统中,看起来是比较容易设计和实现的一个子 ...

  4. Java生鲜电商平台-优惠券系统的架构设计与源码解析

    电商后台:实例解读促销系统 电商后台系统包括商品管理系统.采购系统.仓储系统.订单系统.促销系统.维权系统.财务系统.会员系统.权限系统等,各系统之间相互关联.相互依托,为前端的正常业务流转建立结实稳 ...

  5. 电商平台-RBAC系统权限的设计与架构

    说明:根据上面的需求描述以及对需求的分析,我们得知通常的一个中小型系统对于权限系统所需实现的功能以及非功能性的需求,在下面我们将根据需求从技术角度上分析实现的策略以及基于目前两种比较流行的权限设计思想 ...

  6. 电商抢购秒杀系统的设计_1_应用场景分析

    2019独角兽企业重金招聘Python工程师标准>>> 电商抢购秒杀系统的设计_1_应用场景分析 概述 所谓知已知彼,百战不殆,在开始详细介绍实战中的抢购秒杀系统时,我们了解一些抢购 ...

  7. Java生鲜电商平台-秒杀系统微服务架构设计与源码解析实战

    Java生鲜电商平台-秒杀系统微服务架构设计与源码解析实战 Java生鲜电商平台-  什么是秒杀 通俗一点讲就是网络商家为促销等目的组织的网上限时抢购活动 比如说京东秒杀,就是一种定时定量秒杀,在规定 ...

  8. (附源码)springboot电商系统前端界面设计与浏览器兼容性研究 毕业设计 231058

    基于springboot电商系统前端界面设计 摘  要 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势:对于电商系统前端界面设计与浏览器兼容性研究当然也不能排除 ...

  9. 电商系统之优惠券设计

    优惠券在电商系统中,主要起着营销.促销等作用,是给以用户一定的优惠额度,以吸引用户下次继续购买. 优惠券框架 优惠券设计和开发的难点在于各种条件的限制,如图: 上图基本涵盖了整个优惠券系统里要设计的内 ...

  10. spring boot电商系统前端界面设计与浏览器兼容性研究 毕业设计-附源码231058

    摘  要 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势:对于电商系统前端界面设计与浏览器兼容性研究当然也不能排除在外,随着网络技术的不断成熟,带动了电商系统前 ...

最新文章

  1. php 公共的 受保护的,php-不使用$this-gt;调用受保护的属性
  2. cx_Oracle.DatabaseError: ORA-12514
  3. BZOJ #3166. [Heoi2013]Alo(可持久化trie树+set)
  4. 【算法分析与设计】基数排序
  5. java配置testng_如何使用TestNG JAVA Reflection设置测试方法执行的优先级
  6. 15.看板方法---启动看板变革
  7. java的JDBC简单案例
  8. 什么是servlet及其生命周期
  9. 相比android原生更好看,而且功能齐全的框架,XUI框架的配置和使用?
  10. 手持普通计算机怎么开根号,数学里怎么开根号?具体方法
  11. STM32F030F4P6单片机由外部时钟改为内部时钟
  12. Gos —— 掌控硬盘
  13. C语言怎么实现语音功能
  14. 尼尔机械纪元安卓机器人_尼尔机械纪元手机版
  15. 用Unity开发一款2D横版游戏demo
  16. 微信小程序--字体水平垂直居中
  17. OSI七层网络模型概念
  18. win10系统没声音 服务器,Win10系统电脑没声音解决方案
  19. 学术论文(paper)投稿格式规范
  20. mysql中quarter_MySQL里获取当前week、month、quarter,以及date(),date_format()和str_to_date(),DATEDIFF()操作...

热门文章

  1. 从 dpdk-20.11 移植 intel E810 百 G 网卡 pmd 驱动到 dpdk-16.04 中
  2. 智能机器人-(三)轮式,足式机器人的基本概念
  3. 基于python的人脸识别系统设计与实现
  4. DoozyUI⭐️二十二、Touchy:触摸输入监听组件
  5. 1+X养老照护服务虚拟仿真实训教学--加强养老护理员队伍建设
  6. IntelliJ IDEA修改系统缓存目录解决开发Java项目C盘爆满的坑
  7. 如何使用烙铁:初学者指南
  8. 扁平化设计的前世今生
  9. TradPlus SDK - IOS接入心得
  10. 2022.09.24调研(半导体激光器之光增益)