最近在弄公司的一个活动页面可配置的项目,姑且叫cms吧
功能呢就是每次做促销活动比如双11的时候运营在管理后台配置相应的模块,最终生成页面
接口是类似这个样子的结构
{
list:[
{
type: 1, //这个模块的type,比如1对应商品组合模块
cmsId: 1, //这个模块的唯一id
data: {
//具体的这个模块的数据
}
}
],
code: 200,
msg: ''
}
目前我的思路是这样的:
通过简单的工厂模式定义一个通用接口
var factoryInterface = function(type,data){
switch(type){
case 1:
return new BannerWithBroadcastTpl(data)
break;
case 2:
return new PicDisplayTpl(data)
break;
}
}
BannerWithBroadcastTpl和PicDisplayTpl都是定义好的组件,每个组件都有一个create方法来创造组件
用下面的代码来最终完成项目的初始化
for(var i=0,length=data.length;i<length;i++){
!(function(i){
factoryInterface(data[i].type,data[i]).create(_this.root)
})(i)
}
现在想和各位大神讨论下这个方案还有没有其他的代码设计方案,欢迎大家来喷~~
写在前面
在项目设计之前,先问几个问题:
实际开发双11活动中,什么问题需要我们去解决?这些问题有哪些解决方案?
利用该系统,能否解决我们实际开发双11活动中遇到的问题?能解决百分之几十的问题?
做该项目的Cost有多大?利用该Cost去解决一定占比的问题,是否值得?
项目核心
计划
设计
实施(分期)
遗留问题
项目计划
提出问题:
每次双11活动有多少相同的设计点,可以抽象出来的点有多少? --> 要做一个简单的模板系统,还是功能点齐全的系统?全自动还是半自动? --> 哪些功能需要实现? --> 资源有哪些,是否足够?(人力、时间等等)
想清楚了以上问题,给出一个完整的计划。
项目设计
在上面问题全部想清楚的基础上,举个例子说明:
功能点划分:模块、页面、PV/UV/Track、事件
可以公用的模块有哪些?一种木块有几种展示类型?因此至少需要两个以上的typeId才能区分。
页面与模块通过Id组合起来。
数据埋点与页面组合。
事件系统怎么处理。页面上的操作处理。
其他....
项目实施
考虑一下几个问题:
项目如何分期实现?
前面几个版本如何迭代?
如何快速验证我们的想法是否正确?
安排多少人开发,多少人继续维护这个项目?
遗留问题
该项目只能覆盖部分活动,还有很多活动不通用,人们的需求总在不断变化。
越来越多的模块需要维护,维护难度也很大。
其他...
总结
我这里只是简单的举个例子,怎么去解决这个项目问题,希望有更多的方案。欢迎大家吐槽...