在做的项目经常需要开设实验,在页面载入的同时请求后端得到根据用户 ID 分组的实验参数,以这个为依据对不同的用户展现不同的效果,最后 DA 分析数据采用最优方案。现在问题是项目中遗留了很多这样的实验代码,充斥着大量的 if/else 语句,这些语句有绑在 HTML 上的,也有在函数里面的,也有设置在 class 上的,最后实验结束移除这些实验代码就比较麻烦。现在就想把实验逻辑和业务逻辑区分,想了一种方案:
在需要进行实验的页面或组件下设立 AbTest 文件夹,首先根据实验名创建文件夹,在每个实验文件夹下面创建不同实验组的文件夹,每个实验组文件夹里面放具体的代码,比如 JS 可能就是写函数,比如实验组 A 下的 Test 函数表现的行为是 console.log('A'),实验 B 下的 Test 函数则是 console.log('B'),然后编译时会去把这两个函数改个名,比如 TestGroupA 和 TestGroupB ,挂载到页面或组件实例上,然后创建一个同名函数 Test ,根据异步请求得到的实验参数去判断具体执行哪一个。
这个方案的一个优点是写起来比较清晰,但是代码容易冗余,代码提示可能也没办法特别完善。想问问各位大佬,对 AbTest 这种实验代码分离有没有什么更好的方案