PHP 开发中的三个世界

 

 

现在在PHP的框架上面讨论很多,我觉得这里面主要有两个问题:首先盲目崇拜框架,认为采用框架设计才是正统,否则就是不入流、是菜鸟。其次是模仿 Java 的痕迹很重。我并不是说模仿是一件坏事,这里指的是没有经过认真思索,未曾考虑框架或某些设计的原理与目的、承接项目实际情况和 Java 与 PHP 之间的异同而盲目进行的一些“模仿”工作。《PHP 开发中的三个世界》一文就是针对其中“项目的实际情况”来写的一篇文章,着重讨论了在不同开发领域进行 PHP 开发的一些特点。若有不当之处,还请方家指正。

注:所写内容均为个人感想,转载请注明出处。

PHP 开发中的三个世界

在 PHP 开发领域,不断在讨论讨论 OO ,讨论框架、讨论设计模式、讨论 MVC 模型,讨论这些所带来的种种好处。我不对这些好处进行否认,我只是认为不能盲目跟随某种开发方式,一切方法都是有适用范围的, PHP 开发也不例外。PHP 开发根据受众、服务目标等可以大致可以分为三种不同的开发领域:行业商业软件通用共享软件私有专用软件。在这些不同的领域,所主要采用的开发手段也是有所区别的。明确自己产品所在领域并确定下来一种开发方法是很有必要的。需要说明的是这个三个分类严格说来并不是完全并列,泾渭分明,希望这不会给大家带来困扰,领会意思即可。:)

另限于个人的水平及观点的狭隘,有些看法难免有失偏颇甚至偏激,还望方家不吝赐教。

首先来说一下行业商用软件
这类软件主要面向特定行业或企业的某种应用,项目设计较为复杂。一般为某个开发公司独立承接,几乎没有竞争对手。目前主要以 CRM、CMS、OA 等为代表。这类软件的客户并不关心系统的运行速度有多快,而是关心这个系统能否协调一致完成所需要的功能。由于是面向特定的客户,所以该类软件使用面较为狭窄,若换了另外一家客户通常就不能很好的运行(这里的运行并非指代码的执行,而是指功能的实现),就必须推倒重来。为了减少在开发不同系统当中所作无谓的基础性的重复劳动,我们就必须把这些不同的系统应用中相同的部分给提取出来。这些相同的部分既含有代码技术上的相似性,也包含设计流程上相似性。这是一种将问题进行抽象的过程。我们现有的这些框架、模型就是前人在这些抽象过程的劳动成果。由于几乎每个 Java 项目通常都是较为大型的复杂的应用,所以我们在这些项目中处处可见框架,处处可见模式。你不采用这种开发方式,那就几乎无法前行。PHP 在开发这类应用时是跟 Java 很相似的,唯一不同的就是各自运行环境(主要是指各自的语言解释器,下同)不同。PHP 是一种脚本语言,其支持各种 OO 语言特性的代价很沉重。无论是在空间还是在时间上。所幸对于这类行业商用软件性能是次要的,并且可以自己决定运行环境,因此采用对 OO 特性支持良好的 PHP5 是必然的选择。而且采用一些框架也是必须的。

再来说说通用共享软件
这个概念从传统桌面型共享软件的概念而来,它的主要特点就是客户(包括潜在的客户)众多,同一类型的软件用户的选择也较多,竞争较为激烈。这类软件目前以论坛社区程序为代表。为了赢得客户,那你必须要做得比一般竞争对手更好。对这类软件来说,竞争主要在一下几个方面:

1、界面。界面是你的客户(包括客户的客户)对你产品的第一印象。因此界面必须要友好。界面不单指外观,还包括可操作性。界面必须要考虑到大多数人的习惯,操作必须要简单、顺手。外观虽然是萝卜白菜,但你也必须留一个选择权(接口)给客户,让客户能非常方便地修改使用。

2、性能。良好的界面当然会给你的产品加分。但在这可以 Ctrl+C 和 Ctrl+V 的世界,再优秀的界面都会被竞争对手瞬间所“学习”。如果说界面是第一印象,那么性能将是致命的考察。因为界面可以更换,但你不能指望客户自己去完善代码。在 PHP 开发中,性能很大程度上是指代码的运行速度,另外一个重要的表现就是对系统资源的损耗程度。每个处理进程的资源占有率越低,系统就越有时间来同时处理更多的请求。这些都是一个细微之处见真章的功夫。希望有机会再和大家详细探讨。但其中我个人有个大致的原则就是避免使用类。PHP中的类真是性能杀手。避免使用类的直接后果就是避免使用框架。有人说这样做会影响开发效率。我承认,是可能会造成一些这样的效果。但我认为,效率分两种:开发效率和运行效率。在行业商用软件中我们这样做是不合适的,但在通用共享软件里面,我们的竞争对手很多。况且客户才不会管你使用什么框架、采用什么模式,客户只关心他们自己的体验。雨和熊掌不可兼得,我们必须要舍弃一点开发效率来保证运行效率。这也是不得已而为之。

3、兼容性。

时间: 2024-10-23 10:45:23

PHP 开发中的三个世界的相关文章

在web开发中的三个层次使用事务

web 很多数据库操作需要进行事务,Asp.net下面进行事务大致有3个层次:  (1)存储过程层次的事务  (2)Ado.Net层次的事务  (3)Asp.Net页面层次的事务  下面分别举例:  首先建立trantest表,字段id(int),test(char)  为id设置主键(利用主键是不允许重复的特性进行事务测试)  假设数据库内存在记录id=1,test='test' (1)  CREATE PROCEDURE Tran1  as  begin tran  set xact_abo

开发 ASP.NET 站点中的三种表格化数据方法

asp.net|数据|站点 在开发ASP.NET站点项目中,经常用表格化的方式显示数据.最常用的可能就是DataGrid绑定DataSet数据的方式.在做过的软件项目中,有3种表格化数据的典型处理方式. 1.DataGrid绑定数据源.这种方式大家用的最多,但是DataGrid与ADO.NET完美的绑定方式,还是让人不爽.清一色的DataGrid风格很难适应不同项目的特殊风格,而且在DataGrid上做出的个性化处理也会非常的麻烦. 2.用XML(数据)+XSL(样式单).大家能理解,DataS

Windows 8开发入门(七) Windows 8 中的三种进度条和两种定时器

在Windows 8中的默认进度条也与时俱进,和之前Silverlight中的不一样.本文将讲述三种不同的进度条 ,另外在本文中也会将两种定时器. 进度条 主要属性: Value:当前进度值. Maximum:最大进度值. IsIndeterminate:指定进度条是否确定. 确定进度条:进度明 确的进度条,已完成进度以另外一种颜色显示 关键代码: <ProgressBar Maximum="100" Value="0" Height="20&quo

SQL开发中容易忽视的一些小地方(三)

索引定义:微软的SQL SERVER提供了两种索引:聚集索引(clustered index,也称聚类索引.簇集索引)和非聚集索引(nonclustered index,也称非聚类索引.非簇集索引). SARG的定义:用于限制搜索的一个操作,因为它通常是指一个特定的匹配,一个值得范围内的匹配或者两个以上条件的AND连接.形式如下: 列名 操作符 <常数 或 变量>或<常数 或 变量> 操作符列名列名可以出现在操作符的一边,而常数或变量出现在操作符的另一边. SARG的意义:如果一个

android-《第一行代码》酷欧天气开发中三个问题求解答

问题描述 <第一行代码>酷欧天气开发中三个问题求解答 问题1,如何复制.git这个隐藏目录问题2,为何git push origin master会出现一系列错误问题3,为何我在com.coolweather.app下创建不了包,会提示package already exsists说明只能在src目录下创建,这和书中说的不一样 解决方案 问题三我也遇到了,解决方案:在一个包下在新建其他包:1.1首先更改 1.2.添加包,注意包名命名方式: 1.3.结果如图: 1.4.再新建其他的包: 1.5.

C/C++程序开发中实现信息隐藏的三种类型_C 语言

无论是模块化设计,还是面向对象设计,还是分层设计,实现子系统内部信息的对外隐藏都是最关键的内在要求.以本人浅显的经验,把信息隐藏按照程度的不同分成(1)不可见不可用(2)可见不可用(3)可见可用. 1 不可见不可用 就是说模块内部的变量.结构体.类定义对外部而已完全隐藏,外部对此一无所知.常用的实现方法就是利用不透明指针,请参见我的博文C语言开发函数库时利用不透明指针对外隐藏结构体细节. 这种方法同样适用于C++语言,一种可能的实现方式为面向接口编程. 头文件 IMyClass.h class

ios-xcode开发中,图片素材的三个尺寸问题

问题描述 xcode开发中,图片素材的三个尺寸问题 用xcode开发ios中,图片素材都是有三个尺寸,新手求问这三个尺寸一般是多大?或者说一般各自适配多大的屏幕.菜鸟自学.不太懂. 解决方案 3个尺寸是适配 普通屏,双倍高清屏,三倍高清屏的 一般是已 普通屏 的图为基础,在它基础上 乘2 和 乘3 例如普通屏的图片尺寸是 4*4 px 那另外两个分别是 8*8 px 和 16*16 px 命名方式分别是 imageName.png,imageName@2x.png,imageName@3x.pn

iOS开发中Swift3 监听UITextView文字改变的方法(三种方法)_IOS

在项目中使用文本输入框出UITextField之外还会经常使用 UITextView ,难免会有需求监听UITextView文本框内文本数量.下面介绍在swift3中两种常用方式 方式一: 全局通知 1.注册通知 在合适位置注册监听UITextView文本变化的全局通知 //UITextView 监听开始输入的两种方法 //方法一:通知 NotificationCenter.default.addObserver(self, selector: #selector(ComposeVC.textV

开发中三个经典的原则

      开发中三个经典的原则   单一职责:一个类,一个方法专注做一件事情.不要混合多个目标.     比如我的"绑定手机接口",目标的确是干一件事情:绑定 但是里面还是要判断:这个手机号是不是被占用,还要判断绑定历史,判断手机白名单 只不过把判断绑定历史,判断白名单,封装成单独的方法来调用. 把判断绑定历史,判断白名单,封装成单独的方法 这样就是单一职责.以后其他地方需要用到,就调用这个方法   开放-闭合:是 1998年提出来的.对扩展要开放,容易扩展就是开放.对修改不允许,这