Php开发总结
――泡吧半年开发总结
总结人:王斌
Php开发总结
――泡吧半年开发总结
1. 对比php面向过程和面向对象
1.1. 面向对象的优点
1. 面向对象重用性比较好
2. 面向对象方便维护
3. 面向对象易于扩展
4. 代码可读性好
5. 适合团队开发
1.2. 面向过程的优点
1. 编程速度快
2. 运行效率高
1.3. 不同版本对面向对象的支持
有关PHP的面向过程化编程优势的一个基础性的论据是:PHP是一个解释性的语言--这意味着,不像其它的语言一样,它不会被编译成一个可执行的包,而是被解释并马上执行。
另一个反对在PHP4及更低版本中使用面向对象方式进行编码的理由是:在PHP的早期版本中对象的功能并没有经过良好设计。就像Rasmus曾说过的:“ 那是事后才想起要增加的功能”。这意味着在PHP4及更早的版本中,对象的效率是个问题。
但PHP5出来后,这种情形会有改观。PHP5许诺让面向对象编程更加愉快。有人开玩笑地将它称为PHP中的”Java 2”版本,因为它整合了Java中的许多特性,像接口,面向对象模型,try-catch语句等。
PHP 5 包括新的对象模型,更多新特点,更快的处理速度,特别是处理面向对象代码的速度,虽然在php 4中面向对象代码的速度比较一般,但是在PHP5.x中面向对象代码的速度都超过了面向过程的速度,所以不要对面向对象的性能持有怀疑。
1.4. 总结
1. 面向过程适合的项目:
编程速度快,对于很小的项目,可以按照简单过程完成代码的项目比较适合。这样的项目一般不需要设计,只要按照业务流程一直走下去就能很顺利完成代码,对于此类项目面向过程开发速度很快。
运行效率高,对于基础的php类库,开发完成后基本没有改变,唯一的要求是效率高,这样的项目适合用面向过程。
2. 面向对象适合的项目
中大型项目适合用面向对象开发,大部分项目很难简单地按照业务流程一直走下去,在走流程的过程中,会出现很多分支,不适合面向过程开发,因为面向过程分支多了,代码就比较乱,可读性差,难以维护,而且很难重用。根据面向对象的优点,开发大型项目,设计时对需求做向上抽象,可以提出很多公共代码,虽然设计好像浪费时间,但是重用又把时间节省回来了;经过设计,面向对象编程逻辑比较清晰,可读性好,维护起来比较容易;而且面向对象开发一般都会遵循一些设计模式,这样利于扩展,利于重用;面向对象可以抽象出耦合度较低的相对独立模块,这样比较适合团队开发;面向对象编程,通过良好的注释,可以生成API文档,提高了代码的可读性。
2. 泡吧开发总结
2.1. 公用程序总结
1. 对外提供接口时要考虑其它程序员调用的方便性,为降低耦合度,尽量让外部知道最少的内部结构,用最少的调用完成功能;合理设置接口类的属性和接口类中方法参数的默认值
2. 特别注意异常处理,考虑到其它程序员调用时可能出现的错误,给予人性化提示
3. 程序一定要严谨,虽然php弱类型,但是写公用程序的时候,最好手动做类型判定;要特别注意比较运算符==和===的使用;数组做为参数传递时,最好对key值进行判定
4. 对于公共程序,不但程序要写好,文档也一定要写好,这样有利于其它程序员更好更高效地使用
2.2. 金钱交易程序总结
1. 需要在页面头部进行过滤,如非法操作、禁止刷页等
2. 利用filecontent请求代理服务器会比较慢,所以要尽量减少请求数量,可以通过代理模式,在服务器端提供一个代理类,一次处理多个请求,并将请求结果一次返回
3. 程序内部要做好细致的异常处理,对外界提示异常信息
4. 涉及到上下限的问题,一定要注意是用>还是>=
5. 重要的操作一定要记日志,方便查找
6. 对get的变量进行合法性过滤,特别是金额的过滤
7. 两条以上的update一定要考虑是否使用事务处理
2.3. 合作开发游戏总结
1. 尽量减少耦合性,不同开发人员之间接口留最小
2. 对于结果复杂的操作一定要对操作结果进行标识,并返回给外部调用
3. 一定要做好容错处理。在写底层公共调用部分,service以下的要尽量细地抛出异常,在客户访问端Control以上要捕获所有异常
4. 扩展可以通过扩展字段和扩展表完成。如果扩展的数量很少,而且确定相对稳定,可以通过扩展字段完成;如果扩展的数量较多,或不稳定,则通过扩表完成
5. 一次涉及到多条数据库操作时候,一定要想办法减少sql语句
2.4. 泡吧小项目总结
1. 泡吧小项目需求变化非常大,开发之前最好分析可能的需求变化
2. 不同的功能要用文件区分,这样方便同步
3. 一定要写简单注释,至少要让自己明白
4. 尽量要将相似的代码进行整合,虽然可能不会提高开发效率,但是维护的时候不需要重复修改,这样能提高维护的效率
5. 测试能力也是开发人员必备的,有必要写一下简单的测试文档
6. 一定不要依靠shell来控制时间,一定要通过数据库时间来控制,服务器时间可能存在偏差
3. 基于泡吧框架的开发模式总结
3.1. 数据表实体类封装
1. 说明:面向对象的一个特点就是封装,创建一个实体类(类似java里的bean类)将数据表内容进行封装,这样可以在毫不影响外部的情况下,对读出来的数据进行处理,也可以对写入的数据进行处理
2. 具体实现:
在一般的面向对象编程语言的开发工具中,都会有自动生成封装Get和Set方法的功能,但是php开发工具暂时没有发现。根据这个限制,我自己编写了一个生成工具,输入数据库中的字段名和表名,自动生成实体类,这样减少了开发时间,提高了开发效率。
3.2. 数据访问接口
1. 说明:
对数据库访问进行封装,包括数据库连接、表名、数据库操作方法封装
2. 具体实现:
1) 抽象类:将数据库访问接口进行向上抽象,将公共的部分集中起来,建立一个抽象类,重复使用,集中维护。抽象类封装了数据库连接、表名、数据库操作的方法;并且还封装了memcache连接,对数据进行缓存。
2) 具体类:抽象类的子类,可以通过重写父类数据库属性和memcache属性,很容易完成接口,基本不需要编码。每个数据表还可能会有一些个性化的数据库访问,通过扩展实现个性化操作。
3) 具体类模板:具体类的实现已经写了模板,只需要简单复制修改模板即可完成。
3. 数据访问接口好处:
1) 可以只重写父类数据库信息属性,只需要很少量编码,就可以完成数据库接口。
2) 可以通过重写父类memcache信息属性,只需要很少量编码,就可以对数据库中的数据做缓存。
3) 将数据库查询的结果记录在类的属性里,这样避免了对象重复查询数据库。
4) 对常用的增删查改进行了封装,避免外部写sql语句错误。
5) 可以很灵活方便地处理分表问题,通过在构造函数里处理类的数据表属性,方便快捷地完成分表功能。
3.3. 逻辑接口
1. 说明:
根据外部传入的业务要求,调用数据库访问接口,返回外部需要的数据
2. 具体实现:
1) 抽象类:抽象基本的业务逻辑,如通过id进行数据增删查改等
2) 具体类:项目中可能会有各种各样的业务需求,这时候就要通过逻辑接口的具体类,根据不同的业务,对应上不同的数据访问接口,通过调用数据接口将结果返回外部。因此,大部分的工作都集中在逻辑具体类里。这样容易查错维护。
3) 具体类模板:具体类的实现已经写了模板,只需要简单复制修改模板即可完成。
3. 逻辑接口的好处:
1) 对数据库访问接口进行封装,外部不能直接访问数据库接口,这样降低了数据库接口和外部的耦合度。
2) 采用了单例模式,这样避免了不必要对象的创建浪费资源;同时保证数据库接口对象的唯一,避免了数据库重复查询。
3) 程序开发往往会根据复杂的业务逻辑组成复杂的sql语句,所有复杂sql语句都在逻辑接口中产生,并调用封装在逻辑接口的数据接口,实现复杂的业务逻辑。这样所有的操作都集中在业务逻辑接口里,维护和管理起来都比较容易。
4) 业务逻辑接口可以根据需求采用一些设计模式,使代码重用性、扩展性比较好。
3.4. 控制器通用模式
1. 说明:根据泡吧新框架,通过开发几个项目,总结出了一套高效安全的开发模式
2. 具体实现:
1) 同一个页面,可能会有不同的跳转,因此需要一个$_GET[‘act’]来控制不同的跳转
2) 在执行页面之前,往往需要做一些用户合法操作检查,进行过滤操作,这样使程序更加安全
3) 页面显示需要根据过滤结果和不同的跳转,显示不同的内容,所以页面需要控制层传出一个viewAct
4) 具体流程:过滤操作->根据不同的act调用不同的业务逻辑->生成页面viewAct->页面显示
3. 控制器通用模式好处
1) 代码可读性比较好,易于维护。现在泡吧的MVC使用个异,可读性不太好,可以采用控制器通用模式,统一大家的代码思想和代码风格。
2) 对常见MVC框架进行简化,提取出来的通用模式,基本可以满足泡吧需求。
3.5. 泡吧已试用案例
1. 英雄online游戏
在英雄online开发过程中,我的任务是开发英雄模块,但是兵种模块开发人员请假,所以我接过来了兵种模块,面对两个人的工作量,迫使我寻找捷径,所以想到了这个开发模式。通过编写代码生成工具和抽象基类,提高效率,形成了这个开发模式的雏形。之后,根据英雄online游戏中的问题,对开发模式进行了优化,形成了相对完整的开发模式。
2. 影视梦工厂
利用在英雄online中形成的开发模式,开发得比较顺利,代码组织比较清晰。之前面向对象设计的时候也考虑到了很多策划可能的变化需求,面对策划的需求变化改得也比较容易。
3. 梦幻堂兑换活动
梦幻堂兑换活动策划是两部分:PG换avatar,人品换泡豆。在面向对象设计时,对这两个活动进行了向上抽象,抽象出了一套适用于一般兑换活动的设计方案。在开发的过程中,使用策略模式将不同的兑换活动组织起来。这样开发两个活动,实际上就是一个活动的工作量,稍微再加一点工作。
策划需求变更在程序开发完成之后提出,而且是全部改变,改成人品换avatar活动,因为设计时做了向上抽象,而且使用的策略模式,程序本身的扩展性和重用性比较好,所以只做少量修改便适应了策划需求。
4. 对泡吧管理的一些建议
说明:以下只是个人一些想法和建议,如有不恰当的地方,请原谅。
1. 项目组最好采取人员相对固定的模式
1) 项目组人员相对固定,项目组成员之间会越来越熟悉,配合起来也越来越默契。
2) 项目组人员相对固定,根据马云的7人原则,我个人认为具体项目组最佳数量是5-7人,人员不是很少,可以相互学习相互促进,人员也不是很多,项目组长很好地管理。
3) 项目组人员相对固定,项目组成员之间可以起到相对促进、相互交流的作用,容易形成一个团队的优良氛围,也有利于个人的进步。
4) 项目组人员相对固定,人员的层次关系和每个人的位置比较明确,管理起来也会比较方便。
5) 项目组人员相对固定,项目组成员的代码风格、编码思想都会比较统一,每个成员都可以改整个项目代码;这样也避免了离职后代码不好维护,同项目组成员很容易就可以维护离职人员代码;有人员离职后还可以补入新人,新人在项目组氛围影响下,很快就会融入进来。
2. php开发小组风格的划分
4) php语言非常灵活,具有一个其它语言没有的特点,既可以像java,C#等一样面向对象编程,也可以像asp、C等面向过程编程。面向对象和面向过程编程各有优劣,不能否认任何一个,他们也各有优势,面向过程适合很小的、基本不做扩展、不做重用的项目,而面向对象适合中大型项目,要求扩展性好的项目。所以最好是建利两种风格的项目组,针对不同项目进行开发。
5) 泡吧现在开发思想更多的是面向过程开发,希望泡吧能成立一个面向对象开发的小组,像英雄online和影视梦工厂这样比较大的泡吧游戏,比较适合用面向对象思想开发,这样开发出来的程序易于维护,易于扩展,项目的生命才会更顽强。