关于 FleaPHP

<iframe align="center" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog336280.html" frameborder="0" width="336" scrolling="no" height="280"></iframe>
FleaPHP 并不是心血来潮的结果,而是作者在 Web 开发中不断探索的成果。虽然 FleaPHP 缺乏 Zend Framework 那样巨大的号召力,也没有 CakePHP 和 Symfony 那样庞大的社区。但 FleaPHP 仍然是一个值得你花时间去了­解、去学习的框架。

FleaPHP 的设计目标

FleaPHP 致力于减少开发者创建 Web 应用程序的工作量,并降低开­发难度和强度,提高开发效率。

  • 快速、轻量级,避免臃肿的结­构带来的性能损失

    由于 PHP 是解释执行,如果花费太多资­源在框架本身,显然不适合的。就像一台计算机如果把­大量的资源都花在操作系统上了,而应用程序能够得到­的资源却少得可怜,显然是无法让用户接受的。

  • 可扩展、开放性的架构,允许­开发者引入自己的组件或者任何成熟的工具库

    框架虽然提供了许多组件,但­不可能完全满足用户的需求。因此,框架本身应该是松­散耦合、可扩展的。开发者可以很简单的为框架加入新­的组件。同时,框架的逐步发展也不应该影响框架的核­心基础。最后,开放性的架构让开发者在框架中引入其­他组件或者工具库时不会遇到任何困难。例如开发者可­能会使用 Smarty 来做模板引擎,以及 PEAR 中的一些库来简化开发工作。

  • 尽可能少的契约,但同时提供­足够的自动化能力,减轻开发强度

    虽然契约式编程,可以让框架­本身的设计变得更简单,开发者也能从框架获得更多的­帮助。但太过严格的规则和约定会明显降低框架的适应­性,为此需要对两者进行适当的平衡。Fle­aPHP设计时采用尽可能少的­契约,通过更复杂的实现来实现一些自动化能力。或者­以最少量的配置信息来帮助框架为开发者提供服务。

  • 高度灵活的解决方案,提供开­发应用程序的大多数基本组件

    虽然现在已经有许许多多出色­的工具库可供选择。但对于一些平常的需求来说,这些­工具库可能具有过度杀伤能力(也就是说工具库本身提­供了远远超过需求的功能)。由此带来了学习难度增大­、性能降低等问题。为此,Fle­aPHP 框架提供了一组轻量级的基本­组件。这些组件被设计为拥有基本的功能和可扩展。 例如 FleaPHP 附带的基于角色的权限验证组件虽然不如 phpGACL 这样的库功能强大,但却能够­解决平常开发都会遇到的典型权限验证问题,并允许开­发者自行扩展这个组件。



FleaPHP 的主要特征

除了 MVC 模式实现、Dispatcher 调度器、模板引擎等常见功能­外,FleaPHP 框架还拥有许多独一无二的特点:

  • 简单、容易理解的 MVC 模型

    不像其他流行的框架,FleaPHP 提供的 MVC 模型注重简单和容易理解。例如 FleaPHP 不要求开发者从特定的类派生­自己的控制器类和业务模型类。

  • 易于使用、高度自动化的数据库 CRUD 操作

    FleaPHP 采用 TableDataGateway 设计模式来封装数据表操作。­FLEA_Db_Table­DataGateway 类不但提供了容易使用的 CRUD 操作,还实现了数据表之间的­关联操作。同时,FleaP­HP 没有像其他框架那样将每一行­记录都封装为一个对象(毫无疑问这会产生明显的性能­问题),而是利用 PHP 强大的数组来保存和传递数据。

  • 尽可能少的配置

    虽然像数据库联接信息等配置­仍然是不可少的,但 FleaPHP 应用程序通常只需要设置几个­选项,即可在各种环境中运行良好。而且 FleaPHP 的所有设置都采用 PHP 数组来保存,不但容易理解,­而且省掉了解析、缓存等不必要的过程,提高了性能。

  • 高度可配置能力

    虽然 FleaPHP 自动化程度很高,但 FleaPHP 同时也拥有高度的可配置能力。通过覆盖 FleaPHP 默认的选项,开发者可以获得­最大程度的灵活性。让开发者可以在适应现有代码、保­持开发习惯等各方面获得好处。

  • 自动化的数据验证和转义

    即便不做任何处理,程序将数据通过 FLEA_Db_Table­DataGateway 提交到数据库前。FleaPHP 也会自动对数据进行验证,并­转义特殊字符,最大程度消除 SQL 注入攻击。

  • 丰富的助手对象和组件

    FleaPHP 附带了一些非常实用的助手对­象,从生成图像验证码、处理文件上传到通用数据验证­等。这些助手对象大多是一些独立的对象,完全不依赖于 FleaPHP 框架本身。因此开发者不但可以在 FleaPHP 之外使用这些助手对象,也可­以方便的加入自己的助手对象。 组件是比助手对象更为复杂的­可重用单元。这些组件包括基于角色的用户管理、脚手­架等。利用这些组件,开发者可以很快的完成一些常见­任务,并能在这些组件基础上扩展出功能更复杂的组件。

  • 与 Smarty 集成

    只需要修改几个选项,FleaPHP 应用程序就可以和流行的 Smarty 模版引擎集成。

  • 100% FREE

    当然,最后一点就是 FleaPHP 是一个完全开放源代码和文档­(不是那种滑稽的删除了所有注释仅能运行的代码)、­不限制使用的项目。你可以自由的学习、使用 FleaPHP,也可以在自己的应用­程序中使用 FleaPHP。不管你的应用程序是­否是商业应用,都不需要公开你的源代码,从最大程度­上保护了你的知识产权。不过如果你愿意将代码反馈到­社区,那么大家都会感谢你。

请记住,FleaPHP 是一个持续发展的框架,随时­有新特性被加入到框架中。你现在需要,但 FleaPHP 尚未提供的功能,也许不久以后就出现在 FleaPHP 中了。当然,这需要你积极参与 FleaPHP 的发展,提出你的建议和意见。



自由的 FleaPHP

FleaPHP 是一个遵循 BSD 协议发布的开放源代码应用程­序开发框架。你可以免费获取 FleaPHP 框架,并应用到自己的开发工­作中。与流行的 GPL 协议不同,FleaPHP 遵循的 BSD 协议不要求开发者将基于 FleaPHP 框架开发的应用程序公布于众­。这很好的保护了开发者及其所属企业的利益。更进一­步,即便你基于 FleaPHP 实现了自己的产品或者对 FleaPHP 进行了修改以满足自己的需求­。你仍然不需要公布你的劳动成果。

下面是关于 BSD 协议的简单介绍:

BSD 开源协议是一个给于使用者很­大自由的协议。可以自由的使用,修改源代码,也可以­将修改后的代码作为开源或者专有软件再发布。当你发­布使用了 BSD 协议的代码,或者以 BSD 协议代码为基础做二次开发自­己的产品时,需要满足三个条件:

  • 如果再发布的产品中包含源代­码,则在源代码中必须带有原来代码中的 BSD 协议。
  • 如果再发布的只是二进制类库­/软件,则需要在类库/软件的文档和版权声明中包含­原来代码中的 BSD 协议。
  • 不可以用开源代码的作者/机­构名字和原来产品的名字做市场推广。

BSD 协议鼓励代码共享,但需要尊­重代码作者的著作权。BSD 由于允许使用者修改和重新发­布代码,也允许使用或在 BSD 代码上开发商业软件发布和销­售,因此是对商业集成很友好的协议。很多的公司企业­在选用开源产品的时候都首选 BSD 协议,因为可以完全控制这些­第三方的代码,在必要的时候可以修改或者二次开发。



FleaPHP的起源

两年多以前,我开始涉及使用 PHP 开发 Web 应用的工作。在反复编写一些­过程式代码后,我彻底厌倦了这种开发方式,开始怀念 C++ 中的面向对象设计。这时,正好在 ChinaUnix 上看到了shukebeita­兄的精华贴。在这篇帖子里,shu­kebeita 提出了一种面向对象的 PHP 应用开发方式。虽然只有一个­雏形,但这已经让我受益匪浅。

随后,我根据 shukebeita 的思路实现了 PFC 的第一个版本(当时命名为轻量级 OO 框架)。其实说起来,根本不­能称之为框架,仅仅只有两个类。但已经实现了一个简­单但实用的核心结构。现在回过头来看,PFC1 实际上实现了一个 Dispatcher 模式,根据 HTTP 请求中的 action 参数调用不同的代码。

在接下来的两年时间,PFC 不断翻新,最终发展到了 PFC3。该版本的 PFC 已经完整的实现了 Dispatcher、MVC 模式,并且引入了 ViewDriver 抽象层、基于角色的权限验证、采用 Provider 模式实现的用户和角色信息管­理、一个简单的但带有缓存功能模板引擎等内容。期间­曾经试图将 PFC 发扬光大(笑),可惜由于工­作变动和个人原因,项目进度非常缓慢,最后终于放弃­了。但导致 PFC 放弃的主要原因并不是因为进­度缓慢,而是因为我看到了 Web 应用开发的杀手 —— Ruby on Rails。

Ruby on Rails

Ruby on Rails(后文简称 RoR)是一个采用 Ruby 语言实现的快速、轻便的 Web 应用开发框架,通过契约式编程大大简化了 Web 应用的开发工作。

所谓契约式编程,基本思想就­是开发者必须严格遵守框架确定的一些规则和模式(例­如对象命名、数据库主键字段命名等)。由于这些规则­和模式的存在,框架可以自动完成许多以前需要开发者­自己处理的工作。例如根据特定的名字,获取业务对象­或者数据表操作对象。更主要的原因是 RoR 实现了 ActiveRecord 模式,并且在这个基础模式之­上,扩展了许多便于开发者操作数据库的方法。

虽然 ActiveRecord 只能处理 Create(建立)、Re­ad(读取)、Update­(更新)、Delete(删除)等数据表操作,以­及一对一、一对多和多对多等几种有限的数据表间关联­关系。但我们平时开发的大量应用程序,CRUD 又何尝不是其中的主要内容呢­。因此,RoR 为开发者解决了大部分日常任­务,让开发者可以集中精力到更关键的地方,例如业务­流程的实现。

在我看到 RoR 后,明白 PFC 虽然已经解决了 MVC 模式、权限验证等任务,但最­主要的数据库访问却没有提供任何能够简化开发的解决­方案。经过反复考虑,我终止了 PFC 系列,开始了一个“全新”的框架设计。

Flea1 与 FleaPHP

最初,这个新框架沿用了PF­C系列的命名方式,命名为 flea1(也就是 FLEA 第一版)。在这个版本中,我­试验了一些想法,并取得了不错的效果。

不过,我没有采用严格的 ActiveRecord 模式,而是采用了类似CakeP­HP,一个类似 RoR 的 PHP 框架的 Model 设计。这种设计既实现了 CRUD 操作,又实现了数据表间的关­联操作。将这个最初版本的 flea1 框架应用到实际工作中后,马­上取得了立竿见影的效果。数据库访问工作被大大简化­,甚至连数据库访问代码都不用写了。而且对于数据表­之间的关联,也能完成自动化的处理。

接下来,我拿到了《企业应用­架构模式》这本经典的设计模式书籍。经过仔细研究,­并实际测试。我发现在 PHP 里面使用 ActiveRecord 模式并不是一个很好的选择。因为 ActiveRecord 实际上是针对数据表里面的每­一个数据行构造一个对象。这样一来,对于 PHP 这种面向对象能力不强(尤其是 PHP4)的脚本语言来说,­带来了许多棘手的问题。

最终,flea1 的设计方案进行了一些调整,­确定为现在的架构,并且框架命名为 FleaPHP。



未来的发展

FleaPHP 在外来将继续保持简单易用、­高度模块化的特点,但同时通过可插入的模块形式提供­更多的功能。

FleaPHP 项目的短期目标:

  • 完善文档

    一个成功的项目,离不开完善­的文档和技术支持。目前,Fle­aPHP 的核心和主要功能已经日趋稳­定,但文档还很匮乏。所以,近期 FleaPHP 项目组的主要工作就是完善文­档,确保开发者能够尽快掌握 FleaPHP 的使用。文档目前正在撰写的­包括开发指南和一些系列文章。

  • 支持更多的数据库系统

    目前,FleaPHP 仅能支持 MySQL 数据库。但由于 FleaPHP 的数据库抽象层非常简单,所­以短期内即可增加对多种数据库的支持。

FleaPHP 项目的长期目标:

  • 以插件形式提供更多的功能

    由于 FleaPHP 开放式的结构,开发者可以很方便的为 FleaPHP 提供更多的插件。这些将要增­加的插件包括完整的 Ajax 支持。

  • 吸收开发者参与,将 FleaPHP 建设为一个成功的社区开源项目

如果你有热情,并且有能力为 FleaPHP 做贡献,我们随时都欢迎你加入 FleaPHP 开发者团队!




你可能感兴趣的:(PHP)