豌豆架構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來訪問
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.