一篇清晰简约的需求分析的文章。原文:https://laravel-china.org/courses/laravel-shop/5.7/module-division/2738
用例分析
Laravel Shop 是我们整套课程将要构建的项目名称,是一个单商户的电商系统。本章节将简单地从产品用例的角度上来分析 Laravel Shop 的需求,好让大家对我们即将开发的项目有个基础的概念。我们主要从以下三种元素入手:
- 角色
- 信息
- 动作
接下来做单独分解。
1. 角色
在我们的 Laravel Shop 里,将会出现以下角色:
- 游客 —— 没有登录的用户;
- 用户 —— 注册用户, 可以购买商品;
- 运营 —— 可以上架、下架商品,处理订单;
- 管理员 —— 权限最高的用户角色,可以管理运营。
2. 信息结构
主要信息有:
- 用户 —— 模型名称 User;
- 收货地址 —— 模型名称 UserAddress,包含地址和收货人姓名、电话;
- 商品 —— 模型名称 Product,比如 iPhone X 就是一个商品;
- 商品 SKU —— 模型名称 ProductSKU,同一商品下有个别属性可能有不同的值,比如 iPhone X 256G 和 iPhone X 64G 就是同一个商品的不同 SKU,每个 SKU 都有各自独立的库存;
- 订单 —— 模型名称 Order;
- 订单项 —— 模型名称 OrderItem,一个订单会包含一个或多个订单项,每个订单项都会与一个商品 SKU 关联;
- 优惠券 —— 模型名称 CouponCode,订单可以使用优惠券来扣减最终需要支付的金额;
- 运营人员 —— 模型名称 Operator,管理员也属于运营人员。
3. 动作
角色和信息之间的互动称之为『动作』,动作主要有以下几个:
- 创建 Create
- 查看 Read
- 编辑 Update
- 删除 Delete
用例
1.游客
- 游客可以查看商品列表;
- 游客可以查看单个商品内容。
2. 用户
- 用户可以查看自己的收货地址列表;
- 用户可以新增收货地址;
- 用户可以修改自己的收货地址;
- 用户可以删除自己的收货地址;
- 用户可以收藏商品;
- 用户可以将商品加入购物车;
- 用户可以将购物车中的商品打包下单;
- 用户可以在下单时使用优惠券;
- 用户可以通过微信、支付宝支付订单;
- 用户可以查看自己的订单信息;
- 用户可以对已支付的订单申请退款;
- 用户可以将已发货的订单标记为确认收货;
- 用户可以对已购买的商品发布评价。
3. 运营
- 运营可以看到所有的用户列表;
- 运营可以发布商品;
- 运营可以编辑商品内容;
- 运营可以编辑商品 SKU 及其库存;
- 运营可以下架商品;
- 运营可以将用户已支付的订单标记为已发货;
- 运营可以对申请退款的订单执行退款;
- 运营可以创建、编辑、删除优惠券。
4. 管理员
- 管理员可以查看运营人员列表;
- 管理员可以新增运营人员;
- 管理员可以编辑运营人员;
- 管理员可以删除运营人员。
很多时候,当开发团队开始启动一个项目时,区分功能模块的优先顺序尤其重要,否则你都不知道从哪里下手。这里我们使用一个简单的分析框架,来决策功能模块的开发优先级。你也可以使用其对大部分的 Web 项目进行模块开发的优先级分析。
模块清单
首先,基于我们的需求分析,我们将系统拆分成如下几大模块:
- 用户模块
- 商品模块
- 订单模块
- 支付模块
- 优惠券模块
- 管理模块
依赖关系
有了模块清单,接下来我们需要思考,他们之间的依赖关系是怎样的。在上面的功能清单中,『订单模块』依赖于『用户模块』和『商品模块』,『支付模块』和『优惠券模块』又依赖于『订单模块』。各个模块之间的依赖关系可以用下图来表示:
上层的模块依赖于下层的模块,因此在开发过程中我们会优先构建下层的模块。
开发顺序
所以我们各个模块开发的顺序如下:
- 用户模块
- 商品模块
- 订单模块
- 支付模块
- 优惠券模块
『管理模块』是一个特殊的模块,既包含本身的逻辑(管理后台的权限控制等),又与其他业务模块都有关联,因此在开发过程中会与其他模块穿插开发。
MVP 产品
是的,作为工程师,我们不需要了解产品的方方面面,那是产品经理的工作。但是作为一位优秀的开发者,在开发项目时,对将要完成的产品 MVP 要了然于胸,MVP 是 Minimum Viable Prodcut (最小化可行性产品)的简称。如何得出产品的 MVP 产品呢?可以先问这样的问题:
对于这个产品来讲,哪些功能是必不可缺的?
电商产品是一个用户购买商品的地方,产品存在的核心价值是『用户购买商品』,那首先需要用户、然后需要商品、购买需要付款。所以在我们的电商项目里,用户、商品、订单和支付模块都是必不可少的。
优惠券功能并不是购物流程中必备的一环,属于附加的功能,锦上添花的东西。我们在设计和开发项目时,应优先完成基础的功能,让流程能尽快跑起来,尽早交付,快速迭代。
Web 开发是个速度至上的领域,最小产品功能先上,测试的工作量也不会太大。不能憋大招,一个上线就是一大堆功能,复杂度增加的是无限的开发和调错时间,项目上线期限无尽延长。另一方面,用户能在最短时间内接触到产品,产品经理也可以尽快听到用户的反馈,及时调整产品战略,产品离成功会更进一步,这是一个多赢的方案。
这个思路也与敏捷开发的思路不谋而合:
敏捷开发即是以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。
结语
功能模块的开发优先级,我们已经有了,接下来就是要动手开始写代码了。