2009年1-6月Php开发总结--泡吧半年开发总结

本文总结了作者在泡吧平台半年的PHP开发经验,包括面向过程与面向对象的对比、项目开发心得、基于泡吧框架的开发模式总结及一些建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 


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.     具体实现:

在一般的面向对象编程语言的开发工具中,都会有自动生成封装GetSet方法的功能,但是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.     梦幻堂兑换活动

梦幻堂兑换活动策划是两部分:PGavatar,人品换泡豆。在面向对象设计时,对这两个活动进行了向上抽象,抽象出了一套适用于一般兑换活动的设计方案。在开发的过程中,使用策略模式将不同的兑换活动组织起来。这样开发两个活动,实际上就是一个活动的工作量,稍微再加一点工作。

策划需求变更在程序开发完成之后提出,而且是全部改变,改成人品换avatar活动,因为设计时做了向上抽象,而且使用的策略模式,程序本身的扩展性和重用性比较好,所以只做少量修改便适应了策划需求。

4.  对泡吧管理的一些建议

说明:以下只是个人一些想法和建议,如有不恰当的地方,请原谅。

1.     项目组最好采取人员相对固定的模式

1)     项目组人员相对固定,项目组成员之间会越来越熟悉,配合起来也越来越默契。

2)     项目组人员相对固定,根据马云的7人原则,我个人认为具体项目组最佳数量是57人,人员不是很少,可以相互学习相互促进,人员也不是很多,项目组长很好地管理。

3)     项目组人员相对固定,项目组成员之间可以起到相对促进、相互交流的作用,容易形成一个团队的优良氛围,也有利于个人的进步。

4)     项目组人员相对固定,人员的层次关系和每个人的位置比较明确,管理起来也会比较方便。

5)     项目组人员相对固定,项目组成员的代码风格、编码思想都会比较统一,每个成员都可以改整个项目代码;这样也避免了离职后代码不好维护,同项目组成员很容易就可以维护离职人员代码;有人员离职后还可以补入新人,新人在项目组氛围影响下,很快就会融入进来。

2.     php开发小组风格的划分

4)     php语言非常灵活,具有一个其它语言没有的特点,既可以像java,C#等一样面向对象编程,也可以像aspC等面向过程编程。面向对象和面向过程编程各有优劣,不能否认任何一个,他们也各有优势,面向过程适合很小的、基本不做扩展、不做重用的项目,而面向对象适合中大型项目,要求扩展性好的项目。所以最好是建利两种风格的项目组,针对不同项目进行开发。

5)     泡吧现在开发思想更多的是面向过程开发,希望泡吧能成立一个面向对象开发的小组,像英雄online和影视梦工厂这样比较大的泡吧游戏,比较适合用面向对象思想开发,这样开发出来的程序易于维护,易于扩展,项目的生命才会更顽强。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值