程序员酒后吐真言:开源分类系统背后那些不为人知的秘密
说起来你可能不信,我入行八年,第一次认真研究mymps的代码,竟然是因为一次醉酒。那天晚上和几个老友聚会,聊到这些年做过的项目,不知怎么就聊到了分类信息网站这个话题。有人提起某某城市的地方门户用的是某套开源程序,运营得风生水起,我借着酒劲说了一句:那玩意儿代码结构乱得很,能跑起来纯属侥幸。
结果第二天醒来,手机消息炸了。朋友把我的话截图发到了技术社区,引来一片争论。有人说我是酸葡萄心理,有人说我说得对,还有人让我拿出证据来。得,这梁子算是结下了。我这人有个毛病,越是别人说我不行,我就越要证明给他看。于是我花了整整一周时间,把mymps的源码从头到尾扒了一遍。
说实话,打开代码的那一刻我是带着挑刺的心态的。但很快,这种心态就变了。mymps的目录结构设计得相当清晰,模型层、视图层、控制层分离得井井有条,完全符合标准的企业级开发规范。数据库操作封装成了独立的方法,SQL注入、跨站脚本这些常见漏洞都做了处理,安全意识比我想象的要好得多。我试着找茬,结果越找越心虚——这套代码的作者显然不是新手,至少有五年以上的开发经验。
最让我意外的是模板系统。mymps采用了类Smarty的模板引擎,但做了大量的简化和优化。标签调用方式简洁明了,静态缓存机制效率很高,生成的HTML代码干净整洁,没有那些乱七八糟的冗余标签。这意味着什么?意味着如果我想做二次开发,改起模板来会非常顺手。不像某些系统,表面上功能强大,底层代码却是一团浆糊,想改点什么都无从下手。
深入研究下去,我发现mymps还有一些很有意思的设计细节。比如它的分类管理支持无限层级,这可不是简单的递归就能实现的,还要考虑性能优化和缓存策略。再比如它的搜索模块,竟然支持关键词联想和拼音首字母匹配,这些功能放在商业项目里都是要另外收费的。更别说它内置的短信接口、支付接口、地图定位等扩展功能,几乎涵盖了一个分类信息平台运营所需的全部场景。
一周后,我在那篇争论帖子下面留言:mymps的代码质量中上乘,设计思路值得学习,如果你想快速搭建一个分类信息网站,用它是明智的选择。发完这条消息,我把那瓶没喝完的酒从收藏架上取了下来——用它敬一敬那些默默做开源的程序员们。

