领域场景分析提炼领域知识

组成场景的要素:

6W模型:

Who:用户

What:业务功能

Why: 业务价值

Where:domain

When:应用层对domain层调用的时序

How:业务实现

领域场景分析

前提:

识别参与该场景的用户角色(WHO)

业务功能(What):分析该用户 特征属性 辨别其在在整个场景中参与的活动(如订单系统 用户只参与了下单)

业务价值(WHY):这一功能给该用户角色带来什么样的好处

通过领域分析,结合职责的层次概念,我们就可以得到如下的职责分层结构:

下订单

  • 验证订单是否有效

    • 验证订单是否为空

    • 验证订单信息是否完整

    • 验证订单当前状态是否处于“待提交”状态

    • 验证订单提交者是否为合法用户

    • 验证商品库存量是否大于等于订单中的数量

  • 基于业务规则计算订单总价、优惠与配送费

    • 获取用户信息

    • 获取当前促销规则

    • 计算订单总价

    • 计算订单优惠

    • 计算商品配送费

  • 提交订单

    • 将订单项插入到数据表中

    • 将订单插入到数据表中

    • 更新订单状态为“待付款”

  • 更新购物车

    • 删除购物车中对应的商品

  • 发送通知

    • 给买家发送电子邮件,通知订单提交成功,等待付款

职责分层结构可以使我们更加细致地针对领域进行建模

建模时需要考虑边界(WHERE):如在『下订单』案例中,验证商品库存量的业务实现 需要调用库存提供的接口,该功能室下订单场景的边界之外 使用限界上下文来解决此问题。

场景分析模式:

用例(USE CASE)

用户故事(USE STORY)

测试驱动开发(TEST DRIVEN DEVELOPMENT)

用例:

组成用例图的要素:

WHO

WHAT

WHY

WHERE(如上图中清除购物车中物品 不在下订单领域中 如上图中 用例间协作关系的extend)

用例之间协作关系:

1 包含(include)

2 扩展(extend)

包含扩展的区别:

包含:子用例是主用例中必须的一个执行步骤

扩展:子用例是对主用例的一种补充或强化,即便没有该用例 对主用例也不会产生影响(清除购物车失败 不会对下订单造成影响)

用户故事:

一种经典的用户故事模板:

As a(作为)<角色>

I would like(我希望)<活动>

so that(以便于)<业务价值>

作为一名项目成员

我希望获取分配给自己的未完成任务

以便于跟踪自己的工作进度

Given-When-Then 模式,并通过实例化需求的方式编写用户故事:

作为一名销售经理

我希望为订单设置合适的配送免费的总额阈值

以便于促进平均订单总额的提高

场景1:订单满足配送免费的总额阈值

Given:配送免费的总额阈值设置为95元人民币

And:我目前的购物车总计90元人民币

When:我将一个价格为5元人民币的商品添加到购物车

Then:我将获得配送免费的优惠

场景2:订单不满足配送免费的总额阈值

Given:配送免费的总额阈值设置为95元人民币

And:我目前的购物车总计85元人民币

When:我将一个价格为9元人民币的商品添加到购物篮

Then:我应该被告知如果我多消费1元人民币,就能享受配送免费的优惠

编写“发送邮件”这个业务场景的用户故事(用户故事是从业务角度触发,不会暴露技术细节 应该关注于做什么(WHAT 业务功能) 而不是怎么做(HOW 业务实现)):

如错误的示例:

代码块

Java

Scenario: send email
Given a user "James" with password "123456"
And I sign in
And I fill in "[email protected]" in "to" textbox 
And fill in "test email" in "subject" textbox
And fill in "This is a test email" in "body" textarea
When I click the "send email" button
Then the email should be sent sucessfully
And shown with message "the email is sent sucessfully"

业务建模阶段,业务才是重点,而不是技术实现

专注领域行为的形式编写:

代码块

Java

Scenario: send email
Given a user "James" with password "123456"
And I sign in
And I fill in a subject with "test email"
And a body with "This is a test email"
When I send the email to "Mike" with address "[email protected]"
Then the email should be sent sucessfully

TDD:测试驱动开发:

需求分析优先:任务分解优先

RD在分析需求后,必须完成任务分解,也就是对职责的判别

如果分解之后的任务有太多测试用例需要编写,则任务分解过粗,需要进行再次分解

单元测试,而应该根据领域场景进行编写,不应针对被测方法

发布了84 篇原创文章 · 获赞 6 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/csdn_9527666/article/details/105259194
今日推荐