带你读《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

相关文章
|
5月前
|
人工智能 监控 架构师
AI架构师的诞生:AI+传统DDD模式 = 实现开发效率提升75%
本文以淘宝闪购服务包系统为案例,探索如何借助 AI 技术辅助领域驱动设计(DDD)落地。
AI架构师的诞生:AI+传统DDD模式 = 实现开发效率提升75%
|
存储 缓存 前端开发
带你读《2022技术人的百宝黑皮书》——谈一谈凑单页的那些优雅设计(8)
带你读《2022技术人的百宝黑皮书》——谈一谈凑单页的那些优雅设计(8)
396 0
|
设计模式 双11 索引
带你读《2022技术人的百宝黑皮书》——谈一谈凑单页的那些优雅设计(11)
带你读《2022技术人的百宝黑皮书》——谈一谈凑单页的那些优雅设计(11)
258 0
蓝牙核心规范(V5.3)-深入详解之SCO和eSCO的异同
蓝牙核心规范(V5.3)-深入详解之SCO和eSCO的异同
3018 0
蓝牙核心规范(V5.3)-深入详解之SCO和eSCO的异同
|
SQL 大数据 数据库
RocketMQ实战—1.订单系统面临的技术挑战
本文详细分析了一个订单系统的设计与技术挑战。首先,介绍了订单系统的整体架构、业务流程及负载情况,包括电商购物流程、核心和非核心业务流程,以及真实生产中的负载压力。接着,探讨了系统面临的主要技术问题:支付后发券、发红包等操作导致性能下降;退款流程复杂且易失败;与第三方系统耦合带来的不稳定;大数据团队直接查询数据库影响性能;秒杀活动时数据库压力剧增等。最后,通过放大100倍压力的方法,梳理了高并发下的技术挑战,如核心链路优化、后台线程补偿机制、第三方系统解耦、数据获取方式改进等,为订单系统的优化提供了全面的参考。
RocketMQ实战—1.订单系统面临的技术挑战
|
前端开发 JavaScript 数据处理
前端新手指南:如何解决JavaScript导出CSV文件不完整的问题
【6月更文挑战第4天】在JavaScript中处理CSV文件时,需要特别注意一些特殊字符,例如逗号、双引号、换行符等。这些字符可能会影响CSV文件的解析,导致数据错乱。
556 0
|
人工智能 Linux 开发工具
魔搭社区GGUF模型怎么玩!看这篇就够了
近期,Qwen2系列模型家族发布了系列GGUF格式模型。通过llama.cpp/Ollama等生态的发展,很多大语言模型都支持GGUF格式,极大地简化了大语言模型的应用流程,让即便是模型领域的初学者,只有一台CPU笔记本,也能轻松上手顶尖的AI技术。
|
存储 SQL 关系型数据库
万级TPS亿级流水-中台账户系统架构设计
我们需要给所有前台业务提供统一的账户系统,用来支撑所有前台产品线的用户资产管理,统一提供支持大并发万级TPS、亿级流水、数据强一致、风控安全、日切对账、财务核算、审计等能力,在万级TPS下保证绝对的数据准确性和数据溯源能力。 >注:资金类系统只有合格和不合格,哪怕数据出现只有0.01分的差错也是不合格的,局部数据不准也就意味着全局数据都不可信。
2001 0
|
存储 SQL 分布式计算
技术心得记录:深入学习HBase架构原理
技术心得记录:深入学习HBase架构原理
|
Kubernetes 监控 IDE
K8S 实用工具之三 - 图形化 UI Lens
K8S 实用工具之三 - 图形化 UI Lens