西杰技術分享

Archive for the ‘PHP’ Category

這兩天開始新project了,這次不是唱獨腳戲了,而是與數人合作,亦因此有分工問題。我們三個programmer將會使用PHP JS HTML等等技術來開發一個網站,而程式架構將會是MVC的,問題就是我們的工作時間不一,有人可以早上做,有人晚上做,如果一人負責一部份(M、V、C),那很可能會做成C要等V完成才可以繼續寫,而且每次開始之前亦要先回顧V做過的東西,做不到同步開發,那麼便失去了分工的意義。更恐怖的是C要等V做完才可以測試,或者要另外寫tester來測試,浪費十分多的時間。

因此,我們研究了另一個開發模式,是橫分MVC,以模組為單位,如登入是一個功能模組,搜尋是一個功能模組,每個模組的MVC都由同一人開發,而每個模組之間亦保持高度分離。如果模組間要溝通(例如搜尋模組可分為搜尋框和結果列表),就會使用observer pattern來連接,即建立一個全局的事件處理機制,當搜尋完結時便fire一個event,讓結果列表(observer)更新自己的資料。

另外,為減少回顧別人寫的code 的時間,我們亦設計了一個新的程式碼架構,架構是把Controller的action分開成不同file,並且把JS、PHTML(template檔)分開成多個file,要使用時才載入,以避免測試時會受到別人的syntax error影響。唯一美中不足的是,PHP的物件機制不夠動態,Model很難做到分開數個檔案並動態載入,所以只能夠把Model的method寫在同一檔案。

Skeleton - 這是我們的開發模式骨架。


做好了一套高登+的API了,開發者可以在此看到高登+API文檔


這數天都在做一個網站流量統計的程式,其中一步是要找出每小時的人流。很直觀的,我會使用GROUP BY來處理,然而,這就出現了一個問題。如果有其中一小時沒有人來過網站的話,資料庫內就沒有那一小時的資料,那麼就會出現在每小時的人流統計中缺少了一小時的資料(那小時的人流該為0,現在卻是少了這筆資料)。要解決的方法有很多,但西杰程式的標準是高效和代碼優雅,這確然令我少了很多選擇。 More»


剛才在寫一個將IP轉換為國家名稱的程式,使用了市面上提供的IP文字資料庫。資料庫官網建議使用mysql資料庫來記載資料,然而,如果mysql資料庫和PHP伺服器的主機不同,要使用網絡來拿取資料的話,相信會比本機查找慢。於是,最後我決定封裝一個本機查詢IP資料的程式。 More»