网易首页 > 网易号 > 正文 申请入驻

ZOMBIES:如何在软件开发中实现业务需求(四) | Linux 中国

0
分享至

导读:完善你的电商应用,使它能够正确处理业务规则。

本文字数:3133,阅读时长大约: 4分钟

完善你的电商应用,使它能够正确处理业务规则。

在前面的文章中,我已经解释了为什么将编程问题看作一整群丧尸来处理是错误的。我用 ZOMBIES 方法来解释为什么循序渐进地处理问题更好。

ZOMBIES 表示以下首字母缩写:

Z– 最简场景(Zero)

O– 单元素场景(One)

M– 多元素场景(Many or more complex)

B– 边界行为(Boundary behaviors)

I– 接口定义(Interface definition)

E– 处理特殊行为(Exercise exceptional behavior)

S– 简单场景用简单的解决方案(Simple scenarios, simple solutions)

在系列的前三篇文章中,我展示了 ZOMBIES 方法的前五项。第一篇中 linux.cn,它为代码提供了最简可行路径。第二篇文章中执行了 linux.cn。第三篇中介绍了 linux.cn。在本文中,我将带你了解倒数第二个方法:处理特殊行为。

处理特殊行为

在开发一个电子购物应用时,你需要从产品负责人或赞助商那里了解需要采用什么销售策略。

毫无疑问,与任何电子商业活动一样,你需要通过制定销售策略来诱导顾客进行消费。假设有如下的销售策略:订单金额超过 ¥500 时可以享受一定的折扣优惠。

现在将这个销售策略转换为可运行期望:

  1. [Fact]

  2. public void Add2ItemsTotal600GrandTotal540() {

  3. var expectedGrandTotal = 540.00;

  4. var actualGrandTotal = 0.00;

  5. Assert.Equal(expectedGrandTotal, actualGrandTotal);

  6. }

这个正面样例表示的销售策略是,如果订单总额为 ¥600.00,那么shoppingAPI会将其减价为 ¥540.00。上面的代码伪造了一个失败验证用例。现在修改它,让它能够通过测试:

  1. [Fact]

  2. public void Add2ItemsTotal600GrandTotal540() {

  3. var expectedGrandTotal = 540.00;

  4. Hashtable item = new Hashtable();

  5. item.Add("00000001", 200.00);

  6. shoppingAPI.AddItem(item);

  7. Hashtable item2 = new Hashtable();

  8. item2.Add("00000002", 400.00);

  9. shoppingAPI.AddItem(item2);

  10. var actualGrandTotal = shoppingAPI.CalculateGrandTotal();

  11. Assert.Equal(expectedGrandTotal, actualGrandTotal);

  12. }

在这个正样例中,你向购物框加入一件价值 ¥200 的商品和一件价值 ¥400 的商品,使总价达到 ¥600 。当调用CalculateGrandTotal()方法时,你期望总价是 ¥540。

这个微测试能够通过吗?

  1. [xUnit.net 00:00:00.57] tests.UnitTest1.Add2ItemsTotal600GrandTotal540 [FAIL]

  2. X tests.UnitTest1.Add2ItemsTotal600GrandTotal540 [2ms]

  3. Error Message:

  4. Assert.Equal() Failure

  5. Expected: 540

  6. Actual: 600

  7. [...]

很可惜,它失败了。你期望的结果是 ¥540,但计算结果为 ¥600。为什么会这样呢?那是因为你还没有告诉系统在订单总价大于 ¥500 时怎么进行折扣计算。

现在来实现折扣计算逻辑。根据上面的正样例可知,当订单总价为 ¥600(超过了营销策略的阈值 ¥500)时,期望的最终总价为 ¥540。也就是说系统需要从订单总额中减去 ¥60。刚好是是原订单总价的 10%。因此该销售规则就是当订单总额超过 ¥500 时享受九折优惠。

ShippingAPI类中实现该处理逻辑:

  1. private double Calculate10PercentDiscount(double total) {

  2. double discount = 0.00;

  3. if(total > 500.00) {

  4. discount = (total/100) * 10;

  5. }

  6. return discount;

  7. }

首先,检查订单总额是否大于 ¥500 。如果是,则计算出总额的 10%。

你还需要告诉系统怎么从订单总额中减去 10%。改动非常直接:

  1. return grandTotal - Calculate10PercentDiscount(grandTotal);

到此,所有测试都能够通过。你又一次享受到系统处于稳态的欢愉。你的代码通过处理特殊行为实现了需要的销售策略。

最后一步

现在我已经介绍完 ZOMBIE 了,只剩下 S 了。我将会在最后一篇中介绍它。

(题图:MJ/7f8bf5d2-54ce-4d6e-9dbf-13abf6df966a)

via:

作者: 选题: 译者: 校对:

本文由 原创编译, 荣誉推出

LCTT 译者 :Xiangbin Ma

翻译: 7.0 篇

贡献: 3254 天

2014-07-01

2023-05-29

https://linux.cn/lctt/toknow-gh

欢迎遵照 CC-BY-SA 协议规定转载,

如需转载,请在文章下留言 “ 转载:公众号名称”,

我们将为您添加白名单,授权“ 转载文章时可以修改”。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
当叶童同框赵雅芝,终于见识了自然老与“医美老”的差距有多大了

当叶童同框赵雅芝,终于见识了自然老与“医美老”的差距有多大了

时髦范
2024-06-13 09:08:52
专家分析得出:一旦核战爆发,中国3个地方可躲灾难,一定要知道

专家分析得出:一旦核战爆发,中国3个地方可躲灾难,一定要知道

文史达观
2024-06-14 21:35:17
穆帅陪弗爵看欧洲杯,曝其欲800万签曼联一人!旧将承认怀念狂人

穆帅陪弗爵看欧洲杯,曝其欲800万签曼联一人!旧将承认怀念狂人

罗米的曼联博客
2024-06-15 11:35:14
欧洲杯64年奇景:红牌+点球+乌龙!历史第1次,三赢局面诞生

欧洲杯64年奇景:红牌+点球+乌龙!历史第1次,三赢局面诞生

叶青足球世界
2024-06-15 05:59:30
热搜上毁三观的“和男朋友天天做饭”:新型羞耻,害惨中国年轻人

热搜上毁三观的“和男朋友天天做饭”:新型羞耻,害惨中国年轻人

小椰子专栏
2024-06-14 13:02:51
面具下的普京,20年来对乌克兰干了什么?

面具下的普京,20年来对乌克兰干了什么?

史政先锋
2024-06-13 15:31:40
王室公开凯特最新照片:鞋子穿反了,疑似用旧照生成的

王室公开凯特最新照片:鞋子穿反了,疑似用旧照生成的

金牌娱乐
2024-06-15 12:17:30
36岁的纳格尔斯曼派上38岁的诺伊尔,创造欧洲杯历史

36岁的纳格尔斯曼派上38岁的诺伊尔,创造欧洲杯历史

懂球帝
2024-06-15 04:38:21
欧洲杯,没人看了?

欧洲杯,没人看了?

中国新闻周刊
2024-06-14 22:15:43
22岁卡车司机,带45岁女人跑长途,两人最喜欢经过百里无人区

22岁卡车司机,带45岁女人跑长途,两人最喜欢经过百里无人区

牛城王小帅
2024-06-14 11:45:37
毁三观:被包养的云南女大学生,曝光的聊天记录到底有多无下限

毁三观:被包养的云南女大学生,曝光的聊天记录到底有多无下限

娱乐圈见解说
2024-06-15 07:35:13
我来给“姜萍”泼一盆冷水……真的会误导太多青少年的

我来给“姜萍”泼一盆冷水……真的会误导太多青少年的

石头大叔
2024-06-14 17:37:14
106国参加瑞士和会:中方拒绝参会,与世界文明为伍,勿忘雅尔塔

106国参加瑞士和会:中方拒绝参会,与世界文明为伍,勿忘雅尔塔

大风文字
2024-06-03 10:27:47
金属变石头?中企巨头购买2000吨俄罗斯铜离奇失踪,市场风险堪忧

金属变石头?中企巨头购买2000吨俄罗斯铜离奇失踪,市场风险堪忧

北美商业电讯
2024-06-14 16:42:40
大胃王浪胃仙现身贵州狂吃火锅,彻底变成女人,暴瘦变样像生大病

大胃王浪胃仙现身贵州狂吃火锅,彻底变成女人,暴瘦变样像生大病

郑丁嘉话
2024-06-13 10:28:38
“石油美元协议终结”刷屏朋友圈!真相究竟如何?

“石油美元协议终结”刷屏朋友圈!真相究竟如何?

财联社
2024-06-15 09:42:19
湖南:小伙捧鲜花表白女技师,做足疗一见钟情,网友:长得很哇塞

湖南:小伙捧鲜花表白女技师,做足疗一见钟情,网友:长得很哇塞

百晓史
2024-06-02 09:09:36
危地马拉1-4阿根廷,赛后评分:不是劳塔罗第1,是阿根廷10号第1

危地马拉1-4阿根廷,赛后评分:不是劳塔罗第1,是阿根廷10号第1

侧身凌空斩
2024-06-15 09:53:30
小学生吐槽学校食堂不卫生被处分后续,要求删除视频,评论区沦陷

小学生吐槽学校食堂不卫生被处分后续,要求删除视频,评论区沦陷

皖声微言
2024-06-14 08:41:36
发酵!浙江学生举报学校食堂后续:家长遭威胁,学生受到班级处分

发酵!浙江学生举报学校食堂后续:家长遭威胁,学生受到班级处分

小淇言说
2024-06-14 11:33:21
2024-06-15 14:40:49
Linux
Linux
Linux 中国开源社区
8016文章数 73123关注度
往期回顾 全部

科技要闻

TikTok开始找退路了?

头条要闻

大学生为参赛39天减近20斤后"猝死" 曾自称"变人干了"

头条要闻

大学生为参赛39天减近20斤后"猝死" 曾自称"变人干了"

体育要闻

残暴的德国战车,和苏格兰的祖传倒霉蛋

娱乐要闻

江宏杰秀儿女刺青,不怕刺激福原爱?

财经要闻

新情况!高层对人民币的态度180°转弯

汽车要闻

东风奕派eπ008售21.66万元 冰箱彩电都配齐

态度原创

艺术
手机
旅游
房产
军事航空

艺术要闻

穿越时空的艺术:《马可·波罗》AI沉浸影片探索人类文明

手机要闻

三星新品发布会或定档7月10日 全新折叠屏将亮相法国

旅游要闻

如何文艺消夏?乌镇10大活动开启古镇消夏节

房产要闻

万华对面!海口今年首宗超百亩宅地,重磅挂出!

军事要闻

普京提停火和谈条件 美防长迅速回应

无障碍浏览 进入关怀版