這一兩個月以來幾乎都在寫PHP, 想架構, 沒什麼在動老本行.
我實在不算是夠格的PHP Coder, 相對之下我還比較愛寫Perl & C. 不過最近好幾個需要弄PHP的案子, G社(不是Google)的網站, 幫老朋友的車廠寫管理系統, 自己的Rmail Web界面, 一堆東西要寫PHP, 煩都煩死了.
原本打算找個簡單易用的PHP Framework來用, 大概就CakePHP, Zend Framework, CI, Kohana等等的東西, 不過實際用了一下真的覺得實在不能用, 一來是效能問題, 這種Framework根本談不上效能, 對後端DB來說更是大災難, 大概是因為我本身是玩系統出身, 很難接受這種犧牲效能跟擴充性來達到的開發速度; 二來是彈性很糟糕, 尤其是MVC之下要放進Javascript跟AJAX這類做UI必備的部份, 該把Javascript/AJAX塞到view嗎? 還是要塞到control? 這種小麻煩實在讓我用都不想用.
要說我不懂MVC也行, 要說我龜毛也行, 反正我找不到滿意的Framework. 找不到就自己刻吧! 我要的很簡單, 就有Template與Code Logic分離, 能內含一些泛用API的(例如Session, Database Handler, Image Processing), 能支援gettext就好, 重點是乾淨, 我需要乾淨不吃現有Framework/Libs的環境, 讓我可以很輕鬆的調整效能問題.
我喜歡單一入口的設計模式, 所以我會使用Rewrite加上module/action的做法. Javascript跟AJAX的部份無可避免得用上jQuery, Session有現成的memcached跟Database Stored, Image Processing部份直接調用簡單的imagick(其實我也不想用PECL的ImageMagick, 我是自己寫class去呼叫convert), Database Handler直接做個wrapper去搭各種driver就好(ADODB爛到可以, 我很難相信真的有大網站用這玩意兒), 麻煩在Template問題.
如我之前所說, Template裡頭事實上包含了最終輸出的東西, 所以肯定會有swap template問題, 會有gettext問題, 會有Javascript問題, 更會有pre-define AJAX的問題. 用Smarty不是不行, 麻煩是效能爛到有剩(之前就很多人討論過Smarty存在的價值與意義, 畢竟PHP本身就是一個Template Engine了); 其他不管是Smarty-Lite或是Zend_view彈性都很差, 所以只能決定自己弄個簡單的, 這時候就要狗幹一下PHP5, 難道不能有個 include_get 之類的function嗎? 逼著非得用ob_start()才能拿到include檔案執行完的內容; evel要考慮variables scope, 而且又是fork出新的php來跑, 對httpd/fastcgi的衝擊很大的.
再者AJAX也是大問題, 以往慣用XAJAX, 但是XAJAX太混雜, 本身摻雜了view與control, 要在AJAX裡頭搞gettext更是要規避一些很鳥的問題, Javascript/AJAX一搭上Smarty要做一堆{literal}, 更是友善度大減.
揚棄了Smarty與AJAX後, 就得自己解決與面對Template/AJAX部份, 目前基本的方向是直接用統一的module/action來取Template, Javascript, AJAX Backend, 這樣寫一個頁面與功能只要同時製作 html, javascript, backend ajax就好, 剩下的讓template class/engine去搞定, 這樣子撰寫過程就會很純化, 對以往開發其他新網站也會相對簡單.
目前這個framework(如果可以稱作framework的話啦)已經完成了80%左右了, 現在剩下template engine的部份還在參詳, 由於gettext需要textdomain, 所以也只好不免俗的給這個東西取個名字, 就叫做necit了.
現在不打算開放出來給大家用, 畢竟是未完成品, 也是丟出去給大家看到我醜陋的PHP寫法會汗顏的未完成品, 大概等以上幾個網站都完成且通過實戰測試確定好用後, 再考慮要不要Release.
啊? necit是什麼意思? necit = nekobe’s kit = nekit = necit, 如果要一個比較GNU的說法的話, 呃, 那就 Necit Enhanced Common Internet-application Toolkit, 夠噁心了吧.