由于半路出家,设计模式几乎没有接触,一直为产品代码的耦合头疼,前两天忽然想到,wordpress区区数行代码便实现了强大的插件接口,何不借鉴一下呢,于是便有了下面的假想代码(不了解wordpress插件机制的同学可以先了解一下):
/* * 以一个相册浏览的产品为例 * 该应用可以实现无刷新的图片浏览,附加功能:新用户引导,图片评论,对图片处理的第三方应用,圈人 */ //产品引导开始 addAction('photo_browser_init',function() { guideManager.init(); }); addAction('photo_load_sucess',function(photo) { guideManager.step(3, photo); }); addAction('photo_change',function(photo) { guideManager.step(4); }); //产品引导结束 //管理员ui开始 addAction('photo_browser_init',function() { if ( !currentUser.isAdmin ) return; ...... }); //管理员ui结束 //相册圈人开始 addAction('photo_browser_init', function() { photo_tag.init(); }); addAction('photo_load|photo_change', function(photo) { photo_tag.update(photo); }); //相册圈人结束 //相片app addAction('photo_browser_init',function(photo) { photo_apps.init(photo); }); addAction('photo_load|photo_change',function(photo) { photo_apps.update(photo); }); //相片app结束 //相片评论开始 addAction('photo_browser_init',function(photo) { photo_comment.init(photo); }); addAction('photo_load|photo_change',function(photo) { photo_comment.update(photo); }); //相片评论结束 //相片浏览核心功能开始 var photo_browser = {...}; photo_browser.init(); //相片浏览核心功能结束
其实跟自定义事件有点类似,但是比自定义事件更强大:
- 自定义依赖于对象,对脚本的加载顺序会有要求,而wordpress里的addFilter和addAction可以完美解决这个缺点。
- filter可以实现数据过滤,而自定义事件不能
经过解耦之后的产品更方便多人协作开发,代码块清晰,有效避免svn冲突,还有种种其他好处。。
仅仅是个想法,未经实践,实践ing~

过多的挂载会让wordpress变得很慢。
2011年09月14日 @ 13:28