这10个功能模块,手把手教你从零设计电商系统
yuyutoo 2025-04-29 06:31 2 浏览 0 评论
导读:电商业务与我们的生活息息相关,大家可能对电商多少也有一些了解,事实上,即使是一个最小化的电商系统,也依然是非常复杂的。
所以,我们先花一点时间,一起以一个创业公司的CTO的视角,设计一个最小化的电商系统,并以此理清电商系统的架构。让大家对电商系统的业务逻辑、系统架构、核心业务流程有一个基本的认知。
作者:李玥
来源:华章科技
新公司很快就成立了,你成了新公司的CTO。关于改变世界,目前唯一能确定的是,首先要做一个电商系统。具体要做成什么样,目前还不清楚。你需要与老板讨论业务需求。
- 你:“咱们要做的业务模式是C2C、B2C还是B2B呢?”
- 老板:“什么B?什么C?我不懂你说的那些技术名词。”
- 你:“这么说吧,你要做一个某宝网,还是某东网,还是某848网呢?”
- 老板:“不都是一样的吗?它们之间有什么区别?你赶紧做一个出来我看看不就知道了?!”
故事发展到这里,作为程序员的你是不是有一种似曾相识的感觉?现实就是,需求永远不明确,永远在变化,唯一不变的只有变化。优秀的程序员适应变化,并且拥抱变化。在需求还不太明确的情况下,比较可行的方案就是,首先搭建不太会发生变化的核心系统,然后尽量简单地实现一个最小化的系统,后续再逐步迭代和完善。
01 设计电商系统的核心流程
接下来,我们一起设计这个电商的核心系统。
遵照软件工程的一般规律,我们先从需求阶段开始。那么,需求分析应该如何做呢?理想情况下,系统分析师或产品经理应该负责完成需求分析的任务。但是,现实中绝大多数情况下,你得到的所谓的“需求”,很有可能就是一两句话。需求分析的工作最终往往是由开发者完成的。
很多项目交付以后,仍需要不断地进行修改和变更,用户不满意,开发者也很痛苦,造成这个问题的根本原因其实就是缺失了需求分析的步骤。所以,为了后续工作能够顺利开展,每位开发者都应该掌握一些用于需求分析的方法。
那么,开发者进行需求分析时应该做些什么呢?这里先不介绍那些做需求分析的方法和理论,只告诉你最重要、最关键的一个点:不要一上来就设计功能,而是先明确下面这两个问题的答案。
- 这个系统(或者功能)是给哪些人用的?
- 这些人使用这个系统是为了解决什么问题?
这两个问题的答案,我们称之为业务需求。那么,对于我们将要设计的电商系统,其业务需求又是什么呢?如果大家很熟悉电商的业务,那么回答这两个问题应该很容易。
第一个问题,电商系统是给哪些人用的?首先是买东西的人,即“用户”;其次是卖东西的人,即“运营”;还有一个非常重要的角色就是出钱的人,即“管理者”(请记住,在设计任何一个系统的时候,管理者的意见都是非常重要的)。综上所述,电商系统是面向用户、运营和管理者开发的。
第二个问题,用户、运营和管理者使用电商系统分别想要解决什么问题?这个也很容易回答,用户为了买东西,运营为了卖东西,管理者需要通过系统了解自己所得的收益。
这两个问题的答案,或者说业务需求,稍加细化后,可以用图1-1进行清晰的表述。
图1-1在UML(统一建模语言)中称为用例图(Use Case),是我们进行需求分析的时候所要画的第一张图。用例图可用于回答业务需求中的两个关键问题,即这个系统给谁用?他们用这个系统是为了解决什么问题?
一般来说,业务需求与我们要设计的系统关系不大。为什么这么说呢?因为我们将图1-1中的用例,放在传统的商业企业(比如,一个小杂货铺、一个线下实体商场或商店,或者一个做电视购物的公司)中也是适用的,所以,做业务需求的主要目的是理清楚业务场景是怎样的。
下面就来分析电商系统的业务流程。很显然,电商系统最主要的业务流程,一定是购物流程。购物流程很简单,具体流程如图1-2所示。
所有电商的购物流程几乎都是如此,下面就来分析一下这个流程。
流程从用户选购商品开始,用户首先在App中浏览商品,找到心仪的商品之后,把商品添加到购物车,选完商品之后,打开购物车,提交订单。下单结算之后,用户就可以支付了。支付成功后,运营人员会为已经支付的订单发货,为用户邮寄相应的商品。最后,用户收到商品并确认收货。至此,一个完整的购物流程就结束了。
02 根据流程划分功能模块
接下来,我们再进一步细化电商购物的业务流程,看一下电商系统是如何实现该流程的。图1-3所示的是细化之后的电商系统购物流程时序图(Sequence Diagram)。
下面就来详细讲解图1-3所示的时序图中的各个步骤。
- 用户浏览商品,这个步骤需要通过一个商品模块来展示商品详情页,用户可以从中获取所浏览商品的详细介绍和价格等信息。
- 然后,用户把选好的商品加入购物车,这个步骤需要使用一个购物车模块来维护用户购物车中的商品。
- 接下来是用户下单,这个步骤需要基于一个订单模块来创建新订单。订单创建好了之后,系统需要把订单中的商品从购物车中删减掉。
- 订单创建完成后,系统需要引导用户付款,即发起支付流程,可通过一个支付模块来实现支付功能,用户成功完成支付之后,系统需要把订单的状态变更为“已支付”。
- 成功支付之后,运营人员就可以发货了,发货之后,系统需要扣减对应商品的库存数量,这个步骤需要基于一个库存模块来实现库存数量的变更,同时系统还需要把订单状态变更为“已发货”。
- 最后,用户收到商品,在系统中确认收货,系统需要把订单状态变更为“已收货”,流程结束。
这个流程涉及5大功能模块,即商品、购物车、订单、支付和库存,这5大模块就是一个电商系统中的核心功能模块。
当然,仅有这5个模块是不够的,因为我们只分析了“购物”这个最主要的流程,并没有完全涵盖业务需求中的全部用例,比如,运营人员进货、管理者查看报表等还没有覆盖到。
相比购物流程,剩下的几个用例和流程都相对简单一些,我们可以采用同样的方法来分析其他的功能模块。这里将省略分析过程,直接给出我们所要实现的电商系统的功能模块划分(如图1-4所示)。
图1-4使用了UML中的包图(Package Diagram)来表示电商系统的功能模块。
整个系统按照功能,可以划分为10个模块,除了购物流程中涉及的商品、订单、购物车、支付和库存这5个模块之外,还补充了促销、用户、账户、搜索推荐和报表这5个模块,这些都是构建一个电商系统必不可少的功能模块。下面就来逐一说明每个模块需要实现的功能。
- 商品:维护和展示商品的相关信息。
- 订单:维护订单信息和订单状态,计算订单金额。
- 购物车:维护用户购物车中商品的信息。
- 支付:负责与系统内外部的支付渠道对接,实现支付功能。
- 库存:维护商品的库存信息。
- 促销:制定促销规则,计算促销优惠信息。
- 用户:维护系统的用户信息,注意,用户模块是一个业务模块,一般不负责用户的登录和认证,这是两个完全不同的功能。
- 账户:账户模块负责维护用户的账户信息。
- 搜索推荐:提供商品搜索功能,并负责各种商品列表页和促销页的组织和展示,简单地说就是,搜索推荐决定用户优先看到哪些商品。
- 报表:实现数据统计和分析功能,生成报表,为管理者进行经营分析和决策提供数据信息。
这里需要特别说明的是,促销模块是电商系统中最复杂的一个模块。各种优惠券、满减、返现等促销规则,每一条都非常复杂,再加上这些规则往往还要叠加计算,有时甚至会复杂到连制定促销规则的人都算不清楚。
所有电商公司无一例外都曾因为促销规则制定失误,导致商品实际售价远低于成本价,使公司受到一定程度的损失。尽管如此,五花八门的促销活动依然是提升销量最有效的手段,因此需要充分利用。
作为电商系统的设计者,我们需要把促销规则的变化和复杂性控制在促销模块内部,不能因为一个促销模块而导致整个电商系统都变得非常复杂,否则设计和实现将会很难。
一种可行的做法是,把促销模块与其他模块的接口设计得相对简单和固定,这样系统的其他模块就不会因为新的促销规则改变而随之进行改变。
在创建订单时,订单模块需要把商品和价格信息传给促销模块,促销模块返回一个可以使用的促销列表,用户选择对应的促销和优惠,订单模块把商品、价格、促销优惠等信息,再次传给促销模块,促销模块再返回促销之后的价格。在最终生成的订单中,系统只需要记录订单使用了哪几种促销规则,以及最终的促销价格就可以了。
这样,无论促销模块如何变化,订单和其他模块的业务逻辑都不需要随之改变。
至此,我们就完成了一个电商系统的概要设计,大家对电商系统应该也有了一个初步的了解。
03 小结
下面就来回顾一下一个电商系统的设计中所包含的核心要点。
首先,电商系统面向的角色是:用户、运营人员和管理者。这三个角色对电商系统的需求是:用户通过系统来购物,运营人员负责商品的销售,管理者关注系统中的经营数据。
电商系统最核心的流程是用户购物的流程,购物流程从用户浏览选购商品开始,加购、下单、支付、运营人员发货、用户确认收货,至此电商系统的购物流程结束。
细化这个流程之后,我们可以分析出支撑这个流程的核心功能模块:商品、订单、购物车、支付和库存。除此之外,一个完整的电商系统还包括促销、用户、账户、搜索推荐和报表这些必备的功能模块。
作为一名开发者,在做需求分析的时候,需要把握的一个要点是:不要一上来就设计功能,而是要先理清业务需求。这也是本文反复强调的两个问题:这个系统是给哪些人用的?他们分别用这个系统来解决什么问题?这样就可以确保做出来的系统大体上不会偏离用户的预期。
最后,在讲解系统功能模块划分的时候,介绍了一个能够有效降低系统复杂度的设计经验。那就是,如果系统业务是复杂而多变的,那么请尽量识别出这部分复杂业务的边界,将复杂业务控制在一个模块内部,从而避免将这种复杂度扩散到整个系统中去。
关于作者:李玥,美团基础技术部高级技术专家,极客时间《后端存储实战课》《消息队列高手课》等专栏作者。曾在浪潮集团、当当网、京东零售等公司任职。从事互联网电商行业基础架构领域的架构设计和研发工作多年,曾多次参与双十一和618电商大促。专注于分布式存储、云原生架构下的服务治理、分布式消息和实时计算等技术领域,致力于推进基础架构技术的创新与开源。
本文摘编自《电商存储系统实战:架构设计与海量数据处理》,经出版方授权发布。(ISBN:978-7-111-69741-1)
推荐语:基于实战案例系统讲解电商系统的存储设计,详细分析不同规模存储系统的构建方法。
- 上一篇:职业本科软件工程实训室建设初探
- 下一篇:在线白板工具:解锁创意与协作的新维度
相关推荐
- 深度解读Spring框架的核心原理
-
深度解读Spring框架的核心原理在Java开发的世界里,提到Spring框架,就像提起一位久经沙场的老将,它几乎成了企业级应用开发的代名词。那么,这个被无数开发者膜拜的框架究竟有何独特之处?今天,我...
- 「Spring认证」Spring 框架概述
-
Spring是最流行的企业Java应用程序开发框架。全球数以百万计的开发人员使用SpringFramework来创建高性能、易于测试和可重用的代码。Spring框架是一个开源的Java...
- 学习Spring框架 这一篇就够了
-
1.spring概述1.1Spring是什么(理解)...
- Spring框架双核解析:IOC与AOP的本质与实战
-
#Spring核心#IOC容器#AOP编程#Java框架设计...
- Spring Boot与传统Spring框架的对比:探索Java开发的新境界
-
SpringBoot与传统Spring框架的对比:探索Java开发的新境界在Java生态系统中,Spring框架无疑是一个里程碑式的存在。从最初的简单依赖注入容器,到如今覆盖企业级开发方方面面的庞大...
- Spring MVC框架源码深度剖析:从入门到精通
-
SpringMVC框架源码深度剖析:从入门到精通SpringMVC框架简介SpringMVC作为Spring框架的一部分,为构建Web应用程序提供了强大且灵活的支持。它遵循MVC(Model-V...
- Spring框架入门
-
一.spring是什么?Spring是分层...
- 程序员必知必会技能之Spring框架基础——面向切面编程!
-
面向切面编程AOP(AspectOrientedProgramming)与OOP(ObjectOrientedProgramming,面向对象编程)相辅相成。AOP提供了与OOP不同的抽象软件结...
- Spring Security安全框架深度解读:为你的应用穿上“钢铁铠甲”
-
SpringSecurity安全框架深度解读:为你的应用穿上“钢铁铠甲”在现代网络世界里,保护我们的应用程序免受各种威胁攻击至关重要。而在这个过程中,SpringSecurity框架无疑是我们最可...
- Spring框架的设计哲学与实现:打造轻量级的企业级Java应用
-
Spring框架的设计哲学与实现:打造轻量级的企业级Java应用Spring框架自2003年诞生以来,已成为企业级Java应用开发的代名词。它不仅仅是一个框架,更是一种设计理念和哲学的体现。本文将带你...
- Spring框架深度解析:从核心原理到底层实现的全方位避坑指南
-
一、Spring框架核心概念解析1.控制反转(IoC)与依赖注入(DI)Spring的核心思想是通过IoC容器管理对象的生命周期和依赖关系。传统开发中,对象通过new主动创建依赖对象,导致高耦合;而S...
- Java框架 —— Spring简介
-
简介一般来说,Spring指的是SpringFramework,它提供了很多功能,例如:控制反转(IOC)、依赖注入...
- Spring 框架概述,模块划分
-
Spring框架以控制反转(InversionofControl,IoC)和面向切面编程(Aspect-OrientedProgramming,AOP)为核心,旨在简化企业级应用开发,使开发者...
- spring框架怎么实现依赖注入?
-
依赖注入的作用就是在使用Spring框架创建对象时,动态的将其所依赖的对象注入到Bean组件中,其实现方式通常有两种,一种是属性setter方法注入,另一种是构造方法注入。具体介绍如下:●属性set...
- Spring框架详解
-
Spring是一种开放源码框架,旨在解决企业应用程序开发的复杂性。一个主要优点就是它的分层体系结构,层次结构让你可以选择要用的组件,同时也为J2EE应用程序开发提供了集成框架。 Spring特征...
你 发表评论:
欢迎- 一周热门
-
-
前端面试:iframe 的优缺点? iframe有那些缺点
-
带斜线的表头制作好了,如何填充内容?这几种方法你更喜欢哪个?
-
漫学笔记之PHP.ini常用的配置信息
-
推荐7个模板代码和其他游戏源码下载的网址
-
其实模版网站在开发工作中很重要,推荐几个参考站给大家
-
[干货] JAVA - JVM - 2 内存两分 [干货]+java+-+jvm+-+2+内存两分吗
-
正在学习使用python搭建自动化测试框架?这个系统包你可能会用到
-
织梦(Dedecms)建站教程 织梦建站详细步骤
-
【开源分享】2024PHP在线客服系统源码(搭建教程+终身使用)
-
2024PHP在线客服系统源码+完全开源 带详细搭建教程
-
- 最近发表
- 标签列表
-
- mybatis plus (70)
- scheduledtask (71)
- css滚动条 (60)
- java学生成绩管理系统 (59)
- 结构体数组 (69)
- databasemetadata (64)
- javastatic (68)
- jsp实用教程 (53)
- fontawesome (57)
- widget开发 (57)
- vb net教程 (62)
- hibernate 教程 (63)
- case语句 (57)
- svn连接 (74)
- directoryindex (69)
- session timeout (58)
- textbox换行 (67)
- extension_dir (64)
- linearlayout (58)
- vba高级教程 (75)
- iframe用法 (58)
- sqlparameter (59)
- trim函数 (59)
- flex布局 (63)
- contextloaderlistener (56)