-

一、通用方案的设计

  1. 业务解耦

既然这个新方案要求的是通用,那么这个方案在设计之初,最根本的思想是解耦,
尽可能不要依赖到其它业务逻辑。

  1. 举例

比如如果是一个气泡渲染的通用方案,那么我们的方案就应该是全新的,
这个方案中,控件渲染的文案、样式和配置都尽量在方案内闭环。
比如:

  • BubbleInfo
    • type
    • wording
    • iconUrl

二、通用方案的扩展

通用方案设计完成后,后续一定会对通用方案新增功能,
工程上出现过很多次通用方案设计之初是通用的,但在后续的维护和扩展中,慢慢变得不通用起来。

可以说:维护和扩展一个通用方案花费的精力,要远远高于最初设计这个通用方案所花的精力。

那么,通用方案变得不再通用可能会是哪几种原因导致的呢?

  1. 依赖了某些非通用方案

还是以上面的气泡渲染为例,如果客户端需要读取渲染气泡的时机,代码这么写了:

if BubbleInfo.type == xx
duration = yy

当代码里关于这类逻辑越来越多时,通过xx type,去读取yy的逻辑,就变得不再通用。
因为duration一定捆绑了xx type,如果后续要新增type对应的duration,
那么客户端是一定要发版本进行修改的,且非常容易出现后台新增type,未同步到客户端导致的duration读取问题。

所以最好的方法应该是:duration 应该也要在 BubbleInfo 配置中下发。

  1. 过于相信产品导致的维护危机

我们都知道产品推业务是很紧急的,关于BubbleInfo的优先级问题,产品经常会说:A type 的气泡优先级一定是大于 B type 的,以后也不会变了,就这么上线吧。

那么代码里就出现了类似下面的代码:

if BubbleInfo.type == A
xxx
else if BubbleInfo.type == B
yyy

这样就会导致业务逻辑过于hardCode,后续换产品同学,他可能并不理解为什么A一定大于B,他想进行调整,那么只能客户端在新版本进行调整了。

所以遇到类似问题时,作为开发一定要坚持底线,不能为项目埋坑,在这个需求背景下,我们应该要做的是给 BubbleInfo 新增一个 level 优先级的字段,

由后台来控制 A和B 的优先级。

但如果是你来接手这个需求,你是立马在客户端写上 A > B 的业务逻辑测试上线,还是找后台去申请字段联调测试呢?

三、小结

所以说:通用方案的设计难度是6的话,那么维护其所花费的心血就是8,一个通用方案被设计出来,

只是通用方案整个生命周期的30%,维护和扩展的工作实际上更决定着该通用方案是否真的可行。