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

相关文章
|
设计模式 算法 搜索推荐
带你读《2022技术人的百宝黑皮书》——谈一谈凑单页的那些优雅设计(7)
带你读《2022技术人的百宝黑皮书》——谈一谈凑单页的那些优雅设计(7)
带你读《2022技术人的百宝黑皮书》——谈一谈凑单页的那些优雅设计(7)
|
存储 缓存 前端开发
带你读《2022技术人的百宝黑皮书》——谈一谈凑单页的那些优雅设计(8)
带你读《2022技术人的百宝黑皮书》——谈一谈凑单页的那些优雅设计(8)
106 0
带你读《2022技术人的百宝黑皮书》——谈一谈凑单页的那些优雅设计(5)
带你读《2022技术人的百宝黑皮书》——谈一谈凑单页的那些优雅设计(5)
带你读《2022技术人的百宝黑皮书》——谈一谈凑单页的那些优雅设计(6)
带你读《2022技术人的百宝黑皮书》——谈一谈凑单页的那些优雅设计(6)
|
设计模式 双11 索引
带你读《2022技术人的百宝黑皮书》——谈一谈凑单页的那些优雅设计(11)
带你读《2022技术人的百宝黑皮书》——谈一谈凑单页的那些优雅设计(11)
|
设计模式
带你读《2022技术人的百宝黑皮书》——谈一谈凑单页的那些优雅设计(4)
带你读《2022技术人的百宝黑皮书》——谈一谈凑单页的那些优雅设计(4)
带你读《2022技术人的百宝黑皮书》——谈一谈凑单页的那些优雅设计(4)
|
缓存 NoSQL Redis
带你读《2022技术人的百宝黑皮书》——谈一谈凑单页的那些优雅设计(1)
带你读《2022技术人的百宝黑皮书》——谈一谈凑单页的那些优雅设计(1)
带你读《2022技术人的百宝黑皮书》——谈一谈凑单页的那些优雅设计(1)
|
缓存 NoSQL Redis
带你读《2022技术人的百宝黑皮书》——谈一谈凑单页的那些优雅设计(3)
带你读《2022技术人的百宝黑皮书》——谈一谈凑单页的那些优雅设计(3)
带你读《2022技术人的百宝黑皮书》——谈一谈凑单页的那些优雅设计(3)
|
缓存 NoSQL fastjson
带你读《2022技术人的百宝黑皮书》——谈一谈凑单页的那些优雅设计(2)
带你读《2022技术人的百宝黑皮书》——谈一谈凑单页的那些优雅设计(2)
|
前端开发
带你读《2022技术人的百宝黑皮书》——谈一谈凑单页的那些优雅设计(9)
带你读《2022技术人的百宝黑皮书》——谈一谈凑单页的那些优雅设计(9)