豌豆架構0.6正式發布解決思路
來源:互聯網
上載者:User
豌豆架構0.6正式發布
[color=#339966]豌豆架構(英文名叫Wonderful Framework): [/color]是一個PHP開發架構, 支援PHP5以上版本, 它是免費的, 開源的, 是基於BSD協議發行的.
是具有靈活的, 可擴充的, 可配置的, 組件化的架構結構. 採用物件導向的設計理念, 同時又支援傳統的面向過程的, 在HTML中直接嵌入PHP代碼的開發方式.
支援MVC模式, 能讓程式員更好的與美工合作, 甚至美工不需要會PHP.
PhpTagLib, Action等等, 這些技術能開發人員更好的開發出強大的分層設計構架.
整合有單元測試/對象模仿功能, 還有依賴注入構架, 更好的支援敏捷開發.
架構多處參考了JAVA中的技術, 並對這些技術更一步發揮.
架構還有很多不足之處, 還需不斷完善, 歡迎多提意見, 如有什麼問題, 請向我們反饋. 歡迎你的參與!
特點:
* 靈活, 擴充性強, 複用性高, 完全採用物件導向設計, 並帶有一些有用的類庫.
* 依賴注入, 實現了IoC構架, 為開發人員更好的降低類的依賴性.
* 地址映射, 這是架構的基礎, 開發人員可以自己定義匹配地址, 並映射到專門的類中運行.
* 標籤引擎, PhpTagLib是架構中重要的MVC實現, 允許開發人員定義像HTML/XML這樣的標籤, 實現組件化開發.
* Action模組, 強大的資料處理構架, 支援採用標籤方式調用, 支援多個Action合并使用.
* 迭代器, 擴充增強PHP的迭代器(Iterator)介面, 並融合進架構中的其它模組.
* 資料庫, 對PEAR DB的重新封裝, 支援同時串連多個資料庫, 並提供通過標籤直接查詢.
* 分頁類, 資料分頁和分頁導行分開, 可更好的擴充分頁, 基於迭代器可以對任何資料的迭代器分頁.
* 緩衝, 提供統一的緩衝構架, 開發人員可以方便的擴充, 支援通過緩衝標籤快取頁面面中的內容.
* 測試引擎, 支援TDD開發方法, 敏捷開發的必需品, 支援單獨運行一個測試案例, 也支援運行測試組.
* 對象模仿, 不僅可以Mock指定的類/介面, 還可以Mock父類以分離父類進行測試.
* PlainObject, 支援寫一個普通的類, 不繼承任何類, 不實現任何介面, 可直接用做標籤類或Action類使用.
* 傳統頁面, 可以直接存取傳統的PHP頁面, HTML頁面, 圖片, 指令碼等等檔案.
* 單一入口, 可以在入口程式中設定架構環境.
* 調試, 支援更詳細的錯誤/異常提供, 支援提示環境中的一些資訊.
* XML格式的設定檔, 使配置更直觀, 靈活.
* 內建有PEAR中的一些基本和常用的類庫.
* 免費的, 開源的. 使用BSD開源協議發行, 你可以用在任何項目中.
架構網站: http://www.wonderfulproject.cn
Google Code: http://code.google.com/p/wonderfulframework
樣本: http://www.wonderfulproject.cn/door.php/example.php
相關文章:
PhpTagLib的MVC分層設計
迭代器(Iterator)和分頁(Page)類庫介紹
架構中Action的特性: 組件和組合
在架構中使用FCKEditor
趁過年時, 有些時間發布個新版本.
本架構主要定位在系統開發方面, 提供了些敏捷方面的技術.
隨著架構在實際項目中不斷應用和實踐, 整體的構架已經趨向穩定, 且在易用性上也做了些改進.
將來架構會繼續完善構架, 豐富各個庫(類庫, 標籤庫, Action庫, Validator庫), 增強易用性, 增加控制平台, 提高效率等等方面.
------解決方案--------------------
文檔在那裡?文檔在那裡?
------解決方案--------------------
大致看了一下demo
你的架構不太適合php
1、架構連autoload都沒實現,要知道在PHP中引用包含檔案是件很麻煩的事情。
2、MVC沒看到M和V嘛,那個“PhpTagLib”算作V的話實在有點勉強
3、Action的參數很複雜呀——“WDF_ActionForm & $form, WDF_ActionErrors & $errors”,要知道沒有IDE或工具自動產生代碼的話,參數是越簡單越好的。
4、輸出用$this->response->writeln,這也太複雜了吧。$this->output不是挺好
5、XML格式的設定檔可以直接用PHP Array實現,,可讀性也不差,PHP本身就是動態指令碼,應該好好利用這個特點。
6、擷取action參數要用$form->getValue,是不是複雜了點?
public function process(string $username) { ... } 這樣最好了
這個架構實在太中規中矩了,要知道PHP是低效的動態指令碼語言,不像java/C#,這樣的架構不適合PHP
------解決方案--------------------
首先我還沒看過原始碼,所以有些所提問題的不周之處還請諒解。
> 1、架構連autoload都沒實現,要知道在PHP中引用包含檔案是件很麻煩的事情。
>這個很早我就在想要怎麼加入? 我是這樣考慮的, autoload要怎麼知道要載入哪個檔案呢? 通過類命名規則? 那類名會很長呀! 也許可以用命名空間, 但PHP5.3才支援命名空間, 但這樣的話其實命名還是很長, 除非使用別名, 別名會比include方便多少呢?
一般通過類名實現autoload,根據優先順序,到各個目錄下尋找有無對應的包含檔案,如果有同名類,可以用類似using(...);的函數來設定一個全域標記,告訴autoload應該優先到哪個目錄載入。
實現autoload,主要依賴lib的目錄組織,如果組織得好,會大大便於實現autoload。
-----------------
> 3、Action的參數很複雜呀——“WDF_ActionForm & $form, WDF_ActionErrors & $errors”,要知道沒有IDE或工具自動產生代碼的話,參數是越簡單越好的。
>嗯, 我也認同參數越簡單越好, 但這已經是最簡單了, 這兩個參數對象已經把主要的資料進行歸類了.
為啥不把$form作為controller的成員,而要作為參數傳遞?
為啥不採用php內建的異常處理?class ActionException extends Exception { ... }
throw new ActionException(...);
--------------
> 6、擷取action參數要用$form->getValue,是不是複雜了點?
> public function process(string $username) { ... } 這樣最好了
> 不會最好, 反而更糟. 一個username一個參數, 那還有其它的資料呢? 有一個增加一個, 只會更糟.
我的意思是這樣:
public function process(string $username) { ... }
$username是必要參數,缺少則controller報錯
public function process(string $username = null) { ... }
則表明$username是選擇性參數
頁面傳遞的其餘參數仍然可以通過$form來訪問