带你读《2022技术人的百宝黑皮书》——谈一谈凑单页的那些优雅设计(6)https://developer.aliyun.com/article/1338376?spm=a2c6h.13262185.profile.63.409b6e99Oe0xAd
多算法分流设计
上面讲完了底层的一些代码结构设计,接下来讲一讲针对业务层的代码设计。凑单分为很多个模块,推荐feeds 流、榜单模块、秒杀模块、搜索模块。整体效果图如下:
针对这种不同模块使用不同的算法,我们最先能想到的设计就是每个模块都是一个单独的接口。各自组装各自的逻辑。但在实现过程中会发现,这其中有很多通用的逻辑,比如推荐feeds流和限时秒杀模块,使用的都是凑单引擎的,算法逻辑完全相同,只是多了获取秒杀key的逻辑,所以我会选择使用同一个接口,让该接口能够尽量的通用。这里我选用了策略工厂模式,核心类图如下:
【SeckillEngine】:秒杀引擎,用于秒杀模块业务逻辑封装
【RecommendEngine】:推荐引擎,用于推荐feeds流业务逻辑封装
【SearchEngine】:搜索引擎,用于搜索模块业务逻辑封装
【BaseDataEngine】:通用数据引擎,将引擎的通用层抽离出来,简化通用代码
【EngineFactory】:引擎工厂,用于模块路由到合适的引擎
该模式下,针对可能不断累加的模块,能完成快速的开发并投入使用,该模式也是比较通用,大家都会选择的模式,我这里就不再过多的业务阐述了,就讲讲我对策略模式的理解吧,一提到策略模式,有人就觉得,它的作用是避免 if-else 分支判断逻辑。实际上,这种认识是很片面的。策略模式主要的作用还是解耦,控制代码的复杂度,让每个部分都不至于过于复杂、代码量过多。除此之外,对于复杂代码来说,策略模式还能让其满足开闭原则,添加新策略的时候,最小化、集中化代码改动,减少引入 bug 的风险。
P.S. 实际上,设计原则和思想比设计模式更加普适和重要。掌握了代码的设计原则和思想,我们能更清楚的了解, 为什么要用某种设计模式,就能更恰到好处地应用设计模式。
带你读《2022技术人的百宝黑皮书》——谈一谈凑单页的那些优雅设计(8)https://developer.aliyun.com/article/1338374?groupCode=taobaotech