FleaPHP 的設(shè)計目標(biāo)
FleaPHP 致力于減少開發(fā)者創(chuàng)建 Web 應(yīng)用程序的工作量,并降低開-發(fā)難度和強(qiáng)度,提高開發(fā)效率。
-
快速、輕量級,避免臃腫的結(jié)-構(gòu)帶來的性能損失
由于 PHP 是解釋執(zhí)行,如果花費(fèi)太多資-源在框架本身,顯然不適合的。就像一臺計算機(jī)如果把-大量的資源都花在操作系統(tǒng)上了,而應(yīng)用程序能夠得到-的資源卻少得可憐,顯然是無法讓用戶接受的。
-
可擴(kuò)展、開放性的架構(gòu),允許-開發(fā)者引入自己的組件或者任何成熟的工具庫
框架雖然提供了許多組件,但-不可能完全滿足用戶的需求。因此,框架本身應(yīng)該是松-散耦合、可擴(kuò)展的。開發(fā)者可以很簡單的為框架加入新-的組件。同時,框架的逐步發(fā)展也不應(yīng)該影響框架的核-心基礎(chǔ)。最后,開放性的架構(gòu)讓開發(fā)者在框架中引入其-他組件或者工具庫時不會遇到任何困難。例如開發(fā)者可-能會使用 Smarty 來做模板引擎,以及 PEAR 中的一些庫來簡化開發(fā)工作。
-
盡可能少的契約,但同時提供-足夠的自動化能力,減輕開發(fā)強(qiáng)度
雖然契約式編程,可以讓框架-本身的設(shè)計變得更簡單,開發(fā)者也能從框架獲得更多的-幫助。但太過嚴(yán)格的規(guī)則和約定會明顯降低框架的適應(yīng)-性,為此需要對兩者進(jìn)行適當(dāng)?shù)钠胶狻le-aPHP設(shè)計時采用盡可能少的-契約,通過更復(fù)雜的實(shí)現(xiàn)來實(shí)現(xiàn)一些自動化能力。或者-以最少量的配置信息來幫助框架為開發(fā)者提供服務(wù)。
-
高度靈活的解決方案,提供開-發(fā)應(yīng)用程序的大多數(shù)基本組件
雖然現(xiàn)在已經(jīng)有許許多多出色-的工具庫可供選擇。但對于一些平常的需求來說,這些-工具庫可能具有過度殺傷能力(也就是說工具庫本身提-供了遠(yuǎn)遠(yuǎn)超過需求的功能)。由此帶來了學(xué)習(xí)難度增大-、性能降低等問題。為此,F(xiàn)le-aPHP 框架提供了一組輕量級的基本-組件。這些組件被設(shè)計為擁有基本的功能和可擴(kuò)展。 例如 FleaPHP 附帶的基于角色的權(quán)限驗證組件雖然不如 phpGACL 這樣的庫功能強(qiáng)大,但卻能夠-解決平常開發(fā)都會遇到的典型權(quán)限驗證問題,并允許開-發(fā)者自行擴(kuò)展這個組件。
FleaPHP 的主要特征
除了 MVC 模式實(shí)現(xiàn)、Dispatcher 調(diào)度器、模板引擎等常見功能-外,F(xiàn)leaPHP 框架還擁有許多獨(dú)一無二的特點(diǎn):
-
簡單、容易理解的 MVC 模型
不像其他流行的框架,F(xiàn)leaPHP 提供的 MVC 模型注重簡單和容易理解。例如 FleaPHP 不要求開發(fā)者從特定的類派生-自己的控制器類和業(yè)務(wù)模型類。
-
易于使用、高度自動化的數(shù)據(jù)庫 CRUD 操作
FleaPHP 采用 TableDataGateway 設(shè)計模式來封裝數(shù)據(jù)表操作。-FLEA_Db_Table-DataGateway 類不但提供了容易使用的 CRUD 操作,還實(shí)現(xiàn)了數(shù)據(jù)表之間的-關(guān)聯(lián)操作。同時,F(xiàn)leaP-HP 沒有像其他框架那樣將每一行-記錄都封裝為一個對象(毫無疑問這會產(chǎn)生明顯的性能-問題),而是利用 PHP 強(qiáng)大的數(shù)組來保存和傳遞數(shù)據(jù)。
-
盡可能少的配置
雖然像數(shù)據(jù)庫聯(lián)接信息等配置-仍然是不可少的,但 FleaPHP 應(yīng)用程序通常只需要設(shè)置幾個-選項,即可在各種環(huán)境中運(yùn)行良好。而且 FleaPHP 的所有設(shè)置都采用 PHP 數(shù)組來保存,不但容易理解,-而且省掉了解析、緩存等不必要的過程,提高了性能。
-
高度可配置能力
雖然 FleaPHP 自動化程度很高,但 FleaPHP 同時也擁有高度的可配置能力。通過覆蓋 FleaPHP 默認(rèn)的選項,開發(fā)者可以獲得-最大程度的靈活性。讓開發(fā)者可以在適應(yīng)現(xiàn)有代碼、保-持開發(fā)習(xí)慣等各方面獲得好處。
-
自動化的數(shù)據(jù)驗證和轉(zhuǎn)義
即便不做任何處理,程序?qū)?shù)據(jù)通過 FLEA_Db_Table-DataGateway 提交到數(shù)據(jù)庫前。FleaPHP 也會自動對數(shù)據(jù)進(jìn)行驗證,并-轉(zhuǎn)義特殊字符,最大程度消除 SQL 注入攻擊。
-
豐富的助手對象和組件
FleaPHP 附帶了一些非常實(shí)用的助手對-象,從生成圖像驗證碼、處理 文件上傳 到通用數(shù)據(jù)驗證-等。這些助手對象大多是一些獨(dú)立的對象,完全不依賴于 FleaPHP 框架本身。因此開發(fā)者不但可以在 FleaPHP 之外使用這些助手對象,也可-以方便的加入自己的助手對象。 組件是比助手對象更為復(fù)雜的-可重用單元。這些組件包括基于角色的用戶管理、腳手-架等。利用這些組件,開發(fā)者可以很快的完成一些常見-任務(wù),并能在這些組件基礎(chǔ)上擴(kuò)展出功能更復(fù)雜的組件。
-
與 Smarty 集成
只需要修改幾個選項,F(xiàn)leaPHP 應(yīng)用程序就可以和流行的 Smarty 模版引擎集成。
-
100% FREE
當(dāng)然,最后一點(diǎn)就是 FleaPHP 是一個完全開放源代碼和文檔-(不是那種滑稽的刪除了所有注釋僅能運(yùn)行的代碼)、-不限制使用的項目。你可以自由的學(xué)習(xí)、使用 FleaPHP,也可以在自己的應(yīng)用-程序中使用 FleaPHP。不管你的應(yīng)用程序是-否是商業(yè)應(yīng)用,都不需要公開你的源代碼,從最大程度-上保護(hù)了你的知識產(chǎn)權(quán)。不過如果你愿意將代碼反饋到-社區(qū),那么大家都會感謝你。
請記住,F(xiàn)leaPHP 是一個持續(xù)發(fā)展的框架,隨時-有新特性被加入到框架中。你現(xiàn)在需要,但 FleaPHP 尚未提供的功能,也許不久以后就出現(xiàn)在 FleaPHP 中了。當(dāng)然,這需要你積極參與 FleaPHP 的發(fā)展,提出你的建議和意見。
自由的 FleaPHP
FleaPHP 是一個遵循 BSD 協(xié)議發(fā)布的開放源代碼應(yīng)用程-序開發(fā)框架。你可以免費(fèi)獲取 FleaPHP 框架,并應(yīng)用到自己的開發(fā)工-作中。與流行的 GPL 協(xié)議不同,F(xiàn)leaPHP 遵循的 BSD 協(xié)議不要求開發(fā)者將基于 FleaPHP 框架開發(fā)的應(yīng)用程序公布于眾-。這很好的保護(hù)了開發(fā)者及其所屬企業(yè)的利益。更進(jìn)一-步,即便你基于 FleaPHP 實(shí)現(xiàn)了自己的產(chǎn)品或者對 FleaPHP 進(jìn)行了修改以滿足自己的需求-。你仍然不需要公布你的勞動成果。
下面是關(guān)于 BSD 協(xié)議的簡單介紹:
BSD 開源協(xié)議是一個給于使用者很-大自由的協(xié)議。可以自由的使用,修改源代碼,也可以-將修改后的代碼作為開源或者專有軟件再發(fā)布。當(dāng)你發(fā)-布使用了 BSD 協(xié)議的代碼,或者以 BSD 協(xié)議代碼為基礎(chǔ)做二次開發(fā)自-己的產(chǎn)品時,需要滿足三個條件:
- 如果再發(fā)布的產(chǎn)品中包含源代-碼,則在源代碼中必須帶有原來代碼中的 BSD 協(xié)議。
- 如果再發(fā)布的只是二進(jìn)制類庫-/軟件,則需要在類庫/軟件的文檔和版權(quán)聲明中包含-原來代碼中的 BSD 協(xié)議。
- 不可以用開源代碼的作者/機(jī)-構(gòu)名字和原來產(chǎn)品的名字做市場推廣。
BSD 協(xié)議鼓勵代碼共享,但需要尊-重代碼作者的著作權(quán)。BSD 由于允許使用者修改和重新發(fā)-布代碼,也允許使用或在 BSD 代碼上開發(fā)商業(yè)軟件發(fā)布和銷-售,因此是對商業(yè)集成很友好的協(xié)議。很多的公司企業(yè)-在選用開源產(chǎn)品的時候都首選 BSD 協(xié)議,因為可以完全控制這些-第三方的代碼,在必要的時候可以修改或者二次開發(fā)。
FleaPHP的起源
兩年多以前,我開始涉及使用 PHP 開發(fā) Web 應(yīng)用的工作。在反復(fù)編寫一些-過程式代碼后,我徹底厭倦了這種開發(fā)方式,開始懷念 C++ 中的面向?qū)ο笤O(shè)計。這時,正好在 ChinaUnix 上看到了 shukebeita-兄的精華貼 。在這篇帖子里,shu-kebeita 提出了一種面向?qū)ο蟮?PHP 應(yīng)用開發(fā)方式。雖然只有一個-雛形,但這已經(jīng)讓我受益匪淺。
隨后,我根據(jù) shukebeita 的思路實(shí)現(xiàn)了 PFC 的第一個版本(當(dāng)時命名為輕量級 OO 框架)。其實(shí)說起來,根本不-能稱之為框架,僅僅只有兩個類。但已經(jīng)實(shí)現(xiàn)了一個簡-單但實(shí)用的核心結(jié)構(gòu)。現(xiàn)在回過頭來看,PFC1 實(shí)際上實(shí)現(xiàn)了一個 Dispatcher 模式,根據(jù) HTTP 請求中的 action 參數(shù)調(diào)用不同的代碼。
在接下來的兩年時間,PFC 不斷翻新,最終發(fā)展到了 PFC3。該版本的 PFC 已經(jīng)完整的實(shí)現(xiàn)了 Dispatcher、MVC 模式,并且引入了 ViewDriver 抽象層、基于角色的權(quán)限驗證、采用 Provider 模式實(shí)現(xiàn)的用戶和角色信息管-理、一個簡單的但帶有緩存功能模板引擎等內(nèi)容。期間-曾經(jīng)試圖將 PFC 發(fā)揚(yáng)光大(笑),可惜由于工-作變動和個人原因,項目進(jìn)度非常緩慢,最后終于放棄-了。但導(dǎo)致 PFC 放棄的主要原因并不是因為進(jìn)-度緩慢,而是因為我看到了 Web 應(yīng)用開發(fā)的殺手 —— Ruby on Rails。
Ruby on Rails
Ruby on Rails (后文簡稱 RoR)是一個采用 Ruby 語言實(shí)現(xiàn)的快速、輕便的 Web 應(yīng)用開發(fā)框架,通過契約式編程大大簡化了 Web 應(yīng)用的開發(fā)工作。
所謂契約式編程,基本思想就-是開發(fā)者必須嚴(yán)格遵守框架確定的一些規(guī)則和模式(例-如對象命名、數(shù)據(jù)庫主鍵字段命名等)。由于這些規(guī)則-和模式的存在,框架可以自動完成許多以前需要開發(fā)者-自己處理的工作。例如根據(jù)特定的名字,獲取業(yè)務(wù)對象-或者數(shù)據(jù)表操作對象。更主要的原因是 RoR 實(shí)現(xiàn)了 ActiveRecord 模式,并且在這個基礎(chǔ)模式之-上,擴(kuò)展了許多便于開發(fā)者操作數(shù)據(jù)庫的方法。
雖然 ActiveRecord 只能處理 Create(建立)、Re-ad(讀取)、Update-(更新)、Delete(刪除)等數(shù)據(jù)表操作,以-及一對一、一對多和多對多等幾種有限的數(shù)據(jù)表間關(guān)聯(lián)-關(guān)系。但我們平時開發(fā)的大量應(yīng)用程序,CRUD 又何嘗不是其中的主要內(nèi)容呢-。因此,RoR 為開發(fā)者解決了大部分日常任-務(wù),讓開發(fā)者可以集中精力到更關(guān)鍵的地方,例如業(yè)務(wù)-流程的實(shí)現(xiàn)。
在我看到 RoR 后,明白 PFC 雖然已經(jīng)解決了 MVC 模式、權(quán)限驗證等任務(wù),但最-主要的數(shù)據(jù)庫訪問卻沒有提供任何能夠簡化開發(fā)的解決-方案。經(jīng)過反復(fù)考慮,我終止了 PFC 系列,開始了一個“全新”的框架設(shè)計。
Flea1 與 FleaPHP
最初,這個新框架沿用了PF-C系列的命名方式,命名為 flea1(也就是 FLEA 第一版)。在這個版本中,我-試驗了一些想法,并取得了不錯的效果。
不過,我沒有采用嚴(yán)格的 ActiveRecord 模式,而是采用了類似 CakeP-HP ,一個類似 RoR 的 PHP 框架的 Model 設(shè)計。這種設(shè)計既實(shí)現(xiàn)了 CRUD 操作,又實(shí)現(xiàn)了數(shù)據(jù)表間的關(guān)-聯(lián)操作。將這個最初版本的 flea1 框架應(yīng)用到實(shí)際工作中后,馬-上取得了立竿見影的效果。數(shù)據(jù)庫訪問工作被大大簡化-,甚至連數(shù)據(jù)庫訪問代碼都不用寫了。而且對于數(shù)據(jù)表-之間的關(guān)聯(lián),也能完成自動化的處理。
接下來,我拿到了《企業(yè)應(yīng)用-架構(gòu)模式》這本經(jīng)典的設(shè)計模式書籍。經(jīng)過仔細(xì)研究,-并實(shí)際測試。我發(fā)現(xiàn)在 PHP 里面使用 ActiveRecord 模式并不是一個很好的選擇。因為 ActiveRecord 實(shí)際上是針對數(shù)據(jù)表里面的每-一個數(shù)據(jù)行構(gòu)造一個對象。這樣一來,對于 PHP 這種面向?qū)ο竽芰Σ粡?qiáng)(尤其是 PHP4)的腳本語言來說,-帶來了許多棘手的問題。
最終,flea1 的設(shè)計方案進(jìn)行了一些調(diào)整,-確定為現(xiàn)在的架構(gòu),并且框架命名為 FleaPHP。
未來的發(fā)展
FleaPHP 在外來將繼續(xù)保持簡單易用、-高度模塊化的特點(diǎn),但同時通過可插入的模塊形式提供-更多的功能。
FleaPHP 項目的短期目標(biāo):
-
完善文檔
一個成功的項目,離不開完善-的文檔和技術(shù)支持。目前,F(xiàn)le-aPHP 的核心和主要功能已經(jīng)日趨穩(wěn)-定,但文檔還很匱乏。所以,近期 FleaPHP 項目組的主要工作就是完善文-檔,確保開發(fā)者能夠盡快掌握 FleaPHP 的使用。文檔目前正在撰寫的-包括開發(fā)指南和一些系列文章。
-
支持更多的數(shù)據(jù)庫系統(tǒng)
目前,F(xiàn)leaPHP 僅能支持 MySQL 數(shù)據(jù)庫。但由于 FleaPHP 的數(shù)據(jù)庫抽象層非常簡單,所-以短期內(nèi)即可增加對多種數(shù)據(jù)庫的支持。
FleaPHP 項目的長期目標(biāo):
-
以插件形式提供更多的功能
由于 FleaPHP 開放式的結(jié)構(gòu),開發(fā)者可以很方便的為 FleaPHP 提供更多的插件。這些將要增-加的插件包括完整的 Ajax 支持。
- 吸收開發(fā)者參與,將 FleaPHP 建設(shè)為一個成功的社區(qū)開源項目
如果你有熱情,并且有能力為 FleaPHP 做貢獻(xiàn),我們隨時都?xì)g迎你加入 FleaPHP 開發(fā)者團(tuán)隊!
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
