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

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

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

营销商品引擎key设计

 

设计的背景

跨店满减和品类券从引擎中筛选是通过couponTagId + couponValue来召回的,couponTagId是ump的活动id, couponValue则是记录了满减信息。随着需求的迭代,我们需要展示满足跨店满减并同时满足其他营销玩法(比如限时秒杀)的商品,这里我们已经能筛选出满足跨店满减的品,但如果筛选出当前正在生效的限时秒杀的品呢?

 

 

 

image.png

 

 

image.png详细索引设计

导购的召回主要依赖倒排索引,而我们秒杀商品召回的关键是正在生效,所以我的设想是将时间写入key中,就有了如下设计:

 

字段示例:mkt_fn_t_60_08200000_60

 

index

例子

描述

0

mkt

营销工具平台

1

fn

前N

2

t

前N分钟

3

60

开始前60分钟为预热时间

4

08200000

8月20号0点0分

5

60

开始后60分钟为结束时间

 

 

 

使用方可以遍历当前所有key,本地计算出当前正在生效的key再进行召回,具体细节这里就不做阐述了

 

最后的总结

设计的初衷是提高代码质量

 

我们经常会讲到一个词:初心。这词说的其实就是,你到底是为什么干这件事。不管走多远、产品经过多少迭代、转变多少次方向,“初心”一般都不会随便改。实际上,写代码也是如此。应用设计模式只是方法,最终的目的是提高代码的质量。具体点说就是,提高代码的可读性、可扩展性、可维护性等。所有的设计都是围绕着这个初心来做的。

 

所以,在做代码设计的时候,一定要先问下自己,为什么要这样设计,为什么要应用这种设计模式,这样做是否能真正地提高代码质量,能提高代码质量的哪些方面。如果自己很难讲清楚,或者给出的理由都比较牵强,那基本上就可以断定这是一种过度设计,是为了设计而设计。

 

设计的过程是先有问题后有方案

 

在设计的过程中,我们要先去分析代码存在的痛点,比如可读性不好、可扩展性不好等等,然后再针对性地利用设计模式去改善,而不是看到某个场景之后,觉得跟之前在某本书中看到的某个设计模式的应用场景很相似,就套用上去,也不考虑到底合不合适,最后如果有人问起了,就再找几个不痛不痒、很不具体的伪需求来搪塞,比如提高了代码的扩展性、满足了开闭原则等等。

 

设计的应用场景是复杂代码

 

设计模式的主要作用就是解耦,也就是利用更好的代码结构将一大坨代码拆分成职责更单一的小类,让其满足高内聚低耦合等特性。而解耦的主要目的是应对代码的复杂性。设计模式就是为了解决复杂代码问题而产生的。

 

因此,对于复杂代码,比如项目代码量多、开发周期长、参与开发的人员多,我们前期要多花点时间在设计上,越是复杂代码,花在设计上的时间就要越多。不仅如此,每次提交的代码,都要保证代码质量,都要经过足够的思考和精心的设计,这样才能避免烂代码。

 

相反,如果你参与的只是一个简单的项目,代码量不多,开发人员也不多,那简单的问题用简单的解决方案就好, 不要引入过于复杂的设计模式,将简单问题复杂化。

 

 

持续重构能有效避免过度设计

 

应用设计模式会提高代码的可扩展性,但同时也会带来代码可读性的降低,复杂度的升高。一旦我们引入某个复杂的设计,之后即便在很长一段时间都没有扩展的需求,我们也不可能将这个复杂的设计删除,后面一直要背负着这个复杂的设计前行。

 

为了避免错误的预判导致过度设计,我比较喜欢持续重构的开发方法。持续重构不仅仅是保证代码质量的重要手段,也是避免过度设计的有效方法。我上面的核心流程处理的框架代码,也是在一次又一次的重构中才写出来的。

 

团队介绍

 

营销工具平台,向上支撑淘宝天猫 30+业务场景,向下跟交易全链路系统、营销中台、其他工具平台打通,作为业务的营销抓手,促转化,提客单,引导复购;平台除支撑淘宝天猫的日常营销活动,还有双十一,618,年货节等大促活动的核心工具。

相关文章
|
存储 缓存 前端开发
带你读《2022技术人的百宝黑皮书》——谈一谈凑单页的那些优雅设计(8)
带你读《2022技术人的百宝黑皮书》——谈一谈凑单页的那些优雅设计(8)
416 0
|
5月前
|
人工智能 前端开发 开发工具
从 ReAct 到 Ralph Loop:AI Agent 的持续迭代范式
Ralph Loop 通过外部循环机制,解决 Agent“半途而废”的痛点,实现可靠自主编程范式。
1778 46
|
6月前
|
人工智能 监控 架构师
AI架构师的诞生:AI+传统DDD模式 = 实现开发效率提升75%
本文以淘宝闪购服务包系统为案例,探索如何借助 AI 技术辅助领域驱动设计(DDD)落地。
AI架构师的诞生:AI+传统DDD模式 = 实现开发效率提升75%
|
5月前
|
人工智能 前端开发 API
【cursor】前后端分离项目下的AI跨工程管理方案
针对前后端分离项目中AI编辑器难以跨工程协作的问题,提出通过统一文件夹管理方案,将前端与后端项目置于同一根目录下,利用AI编辑器打开根目录并结合@引用功能,实现对前后端代码的联合理解与开发,提升联调效率与代码生成准确性。
1350 0
|
Oracle Java 关系型数据库
Linux下JDK环境的配置及 bash: /usr/local/java/bin/java: cannot execute binary file: exec format error问题的解决
如果遇到"exec format error"问题,文章建议先检查Linux操作系统是32位还是64位,并确保安装了与系统匹配的JDK版本。如果系统是64位的,但出现了错误,可能是因为下载了错误的JDK版本。文章提供了一个链接,指向Oracle官网上的JDK 17 Linux版本下载页面,并附有截图说明。
Linux下JDK环境的配置及 bash: /usr/local/java/bin/java: cannot execute binary file: exec format error问题的解决
|
数据库连接 网络安全 数据库
Could not create connection to database server.Attempted reconnect 3 times. Giving up.
这篇文章提供了解决数据库连接问题的方法,建议在连接字符串后添加`?serverTimezone=UTC`来指定时区,并检查网络设置、连接属性、驱动版本以及是否需要SSH或SSL连接。
Could not create connection to database server.Attempted reconnect 3 times. Giving up.
|
存储 缓存 NoSQL
这些年背过的面试题——Redis篇
本文是技术人面试系列Redis篇,面试中关于Redis都需要了解哪些基础?一文带你详细了解,欢迎收藏!
1166 17
|
存储 SQL 关系型数据库
万级TPS亿级流水-中台账户系统架构设计
我们需要给所有前台业务提供统一的账户系统,用来支撑所有前台产品线的用户资产管理,统一提供支持大并发万级TPS、亿级流水、数据强一致、风控安全、日切对账、财务核算、审计等能力,在万级TPS下保证绝对的数据准确性和数据溯源能力。 >注:资金类系统只有合格和不合格,哪怕数据出现只有0.01分的差错也是不合格的,局部数据不准也就意味着全局数据都不可信。
2040 0
|
前端开发
带你读《2022技术人的百宝黑皮书》——谈一谈凑单页的那些优雅设计(9)
带你读《2022技术人的百宝黑皮书》——谈一谈凑单页的那些优雅设计(9)
266 0
|
前端开发
带你读《2022技术人的百宝黑皮书》——谈一谈凑单页的那些优雅设计(10)
带你读《2022技术人的百宝黑皮书》——谈一谈凑单页的那些优雅设计(10)
247 0

热门文章

最新文章