带你读《2022技术人的百宝黑皮书》——谈一谈凑单页的那些优雅设计(10)

简介: 带你读《2022技术人的百宝黑皮书》——谈一谈凑单页的那些优雅设计(10)

带你读《2022技术人的百宝黑皮书》——谈一谈凑单页的那些优雅设计(9)https://developer.aliyun.com/article/1338373?groupCode=taobaotech

设计方案

  1. 由于可能需要计算所有勾选的商品,所以前端需要将当前所有已加载的商品数据的勾选状态告知服务端
  2. 超过50个勾选商品时,不再调用动态计算接口,直接用本地价格计算总价,同时降级优惠明细和凑单进度
  3. 前端根据后端返回结果进行合并操作,减少不必要的计算开销

 

整体逻辑如下:

 

 

 

image.png

 

同时针对勾选处理,我将各类获取商品信息的动作封装进领域模型中(比如已勾选品,全部品,下一页品,操作的品,方便复用,代码设计已经讲过),获取各类商品的逻辑代码如下:

image.png

 



勾选处理的逻辑代码如下:

 

8

 

// 勾选操作的品,加入动态计算列表,并勾选

9

 

} else if (checkedHandleMap.containsKey(v.getCartId())) {

10

 

cartItemDetail.setChecked(true);

11

 

cartData.addCalculateItem(cartItemDetail);

12

 

// 取消勾选的品,加入动态计算列表,并去勾选

13

 

} else if (nonCheckedHandleMap.containsKey(v.getCartId())) {

14

 

cartItemDetail.setChecked(false);

15

 

cartData.addCalculateItem(cartItemDetail);

16

 

// 勾选商品的数量修改,加入动态计算

17

 

} else if (modifyHandleMap.containsKey(v.getCartId())) {

18

 

cartItemDetail.setChecked(modifyHandleMap.get(v.getCartId()).getChecked());

19

 

cartData.addCalculateItem(cartItemDetail);

20

 

// 加载下一页,加入动态计算,如果是全选动作下,则将该页商品勾选

21

 

} else if (addNextItemMap.containsKey(v.getCartId())) {

22

 

if (context.isAllChecked()) {

23

 

cartItemDetail.setChecked(true);

24

 

}

25

 

cartData.addCalculateItem(cartItemDetail);

26

 

// 判断是否需要将之前所有勾选的商品加入动态计算

27

 

} else if (calculateAllChecked && checkedItemMap.containsKey(v.getCartId())) {

28

 

cartItemDetail.setChecked(true);

29

 

cartData.addCalculateItem(cartItemDetail);

30

 

}

31

});

 

32

 

 

 


P.S. 这里可能有人会发现,这么多的if-else就觉得它是烂代码。如果 if-else 分支判断不复杂、代码不多,这并没有任何问题,毕竟 if-else 分支判断几乎是所有编程语言都会提供的语法,存在即有理由。遵循 KISS 原则,怎么简单怎么来,就是最好的设计。非得用策略模式,搞出 n 多类,反倒是一种过度设计。

带你读《2022技术人的百宝黑皮书》——谈一谈凑单页的那些优雅设计(11) https://developer.aliyun.com/article/1338369?groupCode=taobaotech

相关文章
|
2月前
|
人工智能 监控 架构师
AI架构师的诞生:AI+传统DDD模式 = 实现开发效率提升75%
本文以淘宝闪购服务包系统为案例,探索如何借助 AI 技术辅助领域驱动设计(DDD)落地。
AI架构师的诞生:AI+传统DDD模式 = 实现开发效率提升75%
|
设计模式 双11 索引
带你读《2022技术人的百宝黑皮书》——谈一谈凑单页的那些优雅设计(11)
带你读《2022技术人的百宝黑皮书》——谈一谈凑单页的那些优雅设计(11)
226 0
|
存储 缓存 前端开发
带你读《2022技术人的百宝黑皮书》——谈一谈凑单页的那些优雅设计(8)
带你读《2022技术人的百宝黑皮书》——谈一谈凑单页的那些优雅设计(8)
352 0
蓝牙核心规范(V5.3)-深入详解之SCO和eSCO的异同
蓝牙核心规范(V5.3)-深入详解之SCO和eSCO的异同
2876 0
蓝牙核心规范(V5.3)-深入详解之SCO和eSCO的异同
|
11月前
|
人工智能 自然语言处理 IDE
通义灵码 2.0 评测:AI 赋能编程,开启高效研发新旅程
通义灵码2.0通过AI赋能编程,显著提升开发效率与代码质量。安装便捷,支持自然语言描述需求自动生成高质量代码框架及注释,大幅简化新功能开发流程。其单元测试Agent能快速生成全面测试用例,覆盖更多边界情况。相比1.0版本,2.0在智能问答和代码生成速度上均有显著提升,为开发者带来高效研发新体验。
739 8
|
10月前
|
人工智能 缓存 NoSQL
高并发秒杀系统设计:关键技术解析与典型陷阱规避
在电商、在线票务等场景中,高并发秒杀活动对系统性能和稳定性提出极大挑战。海量请求可能导致服务器资源耗尽、数据库锁争用及库存超卖等问题。通过飞算JavaAI生成的Redis + Lua分布式锁代码,可有效解决高并发下的锁问题,提升系统QPS达70%,同时避免缓存击穿与库存超卖。相较传统写法,AI优化代码显著提高性能与响应速度,为高并发系统开发提供高效解决方案。
|
前端开发 JavaScript 数据处理
前端新手指南:如何解决JavaScript导出CSV文件不完整的问题
【6月更文挑战第4天】在JavaScript中处理CSV文件时,需要特别注意一些特殊字符,例如逗号、双引号、换行符等。这些字符可能会影响CSV文件的解析,导致数据错乱。
492 0
|
人工智能 Linux 开发工具
魔搭社区GGUF模型怎么玩!看这篇就够了
近期,Qwen2系列模型家族发布了系列GGUF格式模型。通过llama.cpp/Ollama等生态的发展,很多大语言模型都支持GGUF格式,极大地简化了大语言模型的应用流程,让即便是模型领域的初学者,只有一台CPU笔记本,也能轻松上手顶尖的AI技术。
|
Kubernetes 监控 IDE
K8S 实用工具之三 - 图形化 UI Lens
K8S 实用工具之三 - 图形化 UI Lens