最近一个月的总结

差不多块一个月没写日志了,今天思考的头疼,就得闲来写点东西也算记录下自己这一个多月来的思考过程。。。

这一个月是在帮助公司构思一个新的通用的开发框架,说白了就是要把常见网站功能的后台整理出来,把功能基本实现,这样在正式做的时候,只需要修改前台的样式和一些小功能,再增加没有的功能就可以了,也不需要再做后台的样式和功能等,这种事情估计很多人都做过,不管是新手老手,说起来也挺容易的,但真要做好其实也挺不容易的。这个东西有点像开发框架,也有点像一个应用系统,总之我自己看着就是个四不像,呵呵。。

首先我想到的就是需要有一个后台的具体的样式,就顺手将wordpress的拿过来了,就是感觉wp做的很精致,非常注重细节(可能也是老外的传统),另外就是要简单的封装一些功能,首先我想到的就是数据库操作、缓存操作、文件操作(配置文件)、邮件操作,这些都在框架里都写过了,基本就是源码照搬过来,然后做适当的修改,用时很少就完成了;其中数据库操作是改动最大的,因为在框架中数据库操作是使用的ORM,但是在这个系统中,不需要ORM,只需要简单的SQL语句执行,另外再提供一些常用的方法比如:insert(表名,数据键值对),update(表名,数据键值对,条件),get_first(表名,条件,排序),这三个方法都只是简单的方便操作,并不处理复杂SQL,复杂SQL都直接运行SQL语句,这也简单原则,封装越多其实也越容易出问题。。。

有了一些核心库之后我开始考虑的就是程序的多语言支持。因为这套系统主要是用来给用户开发产品,可能就会涉及到多语言的需求,所以我就决定使用PHP的I18N支持,想使用I18N必须在编译PHP是加入--with-gettext,当然,你可以自己实现,我比较懒就决定使用PHP自带的扩展。其中碰到了在WINDOWS下面gettext不起作用的问题,没有太在意,因为系统是要泡在linux下的(linux下测试没啥问题);然后下载了个工具poedit用来编辑po文档并且声称mo文档;在此期间我又碰到了一个问题就是gettext函数不支持参数,只能简单的死板翻译比如gettext("Hello World!")而不支持如gettext("Hello World %s", "zeroq")这样的格式,这个不能满足要求就自己封装一个,所以我自己定义了()函数来解决此问题,基本上就变成了("Hello World %s", $my_name)这样的方式。基本上多语言就差不多了,只要在碰到要显示文字的地方记得调用_()函数来输出就OK了。

完成了多语言模块后,我开始敲定程序执行流程:

  1. 加载common.php,common.php负责定义一些常量如版本、名称、根路径等等;

  2. common.php会加载config.php;config.php是一个配置文件,网站的核心配置都在里面如数据库、缓存等等

  3. common.php加载include/load.php,load.php会加载include/functions.php;

  4. functions.php中提供了很多的公用的函数;在load.php中调用很多初始化系统的函数以创建系统的初始运行环境如:初始化数据库、初始化缓存、过滤用户变量、载入多语言设置、设置时区、载入网站信息配置、检查网站是否在维护等等

  5. 然后交由具体的用户访问的文件进行逻辑处理

具体的流程就是这样,很简单,可能因为最近在读《UNIX编程艺术》受到感染的缘故,一直希望降低系统的复杂度;

有了具体的执行流程,我又规定了下程序的基本原则如命名规则、各种文件的目录存放格式等。然后基本工作就做完了,可以开始具体功能的编码,再此之前我没有对这个系统进行任何的规划,只是有一个目标和需要需要实现的大概功能,有人可能要问需求呢?回答是没有需求,很多时候根本不可能有人给你需求,你也不可能事事巨细的去写好需求文档再开始开发,所以只要能把握大方向,不要过度开发就好,我还是比较推崇先做出一个,再修改,再优化的思路。

剩下的时间我为系统添加了用户模块、权限、日志、系统设置等功能,还增加了后台的消息提示机制(永久和临时)、增加了list_table来处理后台很常见的列表、将后台管理菜单提取出来以便随时添加项、增加了类似wordpress的插件机制即钩子;至此整个系统的后台基础已经搭建完成,可以开始写具体的功能模块比如:文章模块;

这一个月来基本就做了这些事情,做的比较慢,因为期间思考的比较多;现在算是完成了第一步,回头再看,发现没什么可优化的,但是有些地方比较臃肿,就删除了很多的代码,可能这就是大道至简吧。。。

插件机制也是这个系统的核心功能,有它的存在才能方便日后不用事事都修改以前的代码,可以很方便开发出很实用的工具或者新功能,或者对现有功能进行hack,重重的参考了wordpress。。。

Published: July 04 2011

blog comments powered by Disqus