初探 Zend_Search_Lucene

全文檢索一直是內容型網站很重要的功能之一,它讓使用者可以快速透過一些關鍵字來找到網站中符合條件的文章。

在 Zend Framework 裡, Zend_Search_Lucene 就是提供這個功能的套件,它是以 Apache Lucene 專案為參考,而以 PHP 實作。

Zend_Search_Lucene 的說明在官方手冊中已經寫得很詳細,以下我會用較為簡明的方式來介紹重點。

閱讀更多

讀書會報告 - 深入淺出 MVC

MVC 一直以來是初學者很難跨過的一個觀念障礙,因此前陣子,我便在 PHP 讀書會中分享了這個主題:深入淺出 MVC 。

這次的內容主要介紹了 MVC 與 MVP 的觀念,以及簡易的 PHP 及 JavaScript 實作,希望能讓大家對 MVC 有進一步的認識。

閱讀更多

學習設計模式的心得

從幾年前開始接觸設計模式之後,一直覺得設計模式真的是太酷了!而這其間看了一些設計模式的書籍與文章,也實作了一些模式,深深覺得大師們的教導是對的。

但要到達大師所體悟的境界,以我目前的程度來說還差得很遠;所以就我個人所學的過程,我簡單整理出一句話,那就是:

找出模式,熟悉模式,模仿模式,忘掉模式,而後領悟模式。

閱讀更多

實戰 PHP 重構與模式

重構對一般開發者來說,實在是一件吃力不討好的事情,更別說想要把程式以模式來重構了。

在這次的讀書會報告裡,我首次挑戰這樣的題目,為大家介紹如何將模式真正地應用到重構裡,也以實際的例子來展現重構與模式的威力。

當然以我個人的能力,還是有很多不盡理想之處;但還是希望透過這樣的介紹,讓大家對重構與模式有不一樣的看法。

因為在讀書會是用 Live Demo 來呈現重構的流程,所以可能在看投影片和範例時,會無法感受到重構與模式的魅力,這點要請大家多多包涵。

以下就是本次報告的投影片及範例:

閱讀更多

[PHP] 簡易的物件傳遞方法

在 PHP 中,傳遞物件是很容易的事;我們只需要將物件的狀態封裝起來後,以字串的方式傳遞給另一端的程式還原執行即可。物件的傳遞用途很多,例如我們在 Gearman 中,就可以在 client 把物件當做是 job data 傳遞給 Server 。

註: Gearman 的介紹可以參考拙作:Gearman 心得

以下我們來看看範例。

閱讀更多

重構實例介紹 – 分析篇

重構是什麼?這問題其實真的很難回答。

我個人覺得重構是一種讓程式保持活力的一種方法,讓它能隨著時間而不斷地進化。如果我們一直放任自己不對程式碼做適當的整理,而是靠著不求甚解的修修補補來維繫它的生命,很快地程式碼就會變得殘破不堪、臃腫肥大而難以維護。

而且有的時候,我們也想讓程式碼能隨著我們觀念的增長,以適應未來的變化;今天我們會覺得這樣的寫法很讚,但明天可能又會學到更好的寫法,重構就能給我們改變程式碼的機會。

但是這些都是很籠統的解釋,有沒有什麼方法可以讓我們更瞭解重構呢?我想,只有用實際的例子來說明是最直接的吧。但是太精簡的範例可能表達不了重構的意圖,而過於複雜的範例又會讓重構的焦點模糊,要找到一個適合的例子可能比重構本身還困難。

後來某次的改版機會下,我分析了伙伴之前所製作的功能並做了一次重構,發現這個功能的規模不算太大,而且也很容易展現出重構後的優點;因此,我便將這個功能稍微做了簡化以方便說明,希望能讓大家瞭解重構究竟是在做些什麼。

不過這個範例雖然不大,但也還是需要一番功夫來解說;因此我將會把它分成兩個部份來說明,第一篇是分析,第二篇則是實戰。

接下來就一起來看看這個例子吧。

閱讀更多

重構實例介紹 – 實戰篇

接續前篇:重構實例介紹 - 分析篇

在上一篇中,我們分析了該功能的每段程式碼,也瞭解有哪些地方需要改進,接著我們就來進入實戰的階段。

在實戰的階段,我們要做兩件事:建立自動化測試,重構程式碼。

閱讀更多

購物車程式架構簡介

自從學習開發 Web 程式以來,我的工作就離不開購物車了。從模仿其他網站的購物機制開始,到接觸了物件導向後的所寫的購物車架構,每一次的經驗都讓我成長不少。

不過每次所寫出來的購物車系統,不論是在新增功能或是修改上都讓我覺得非常麻煩;只要客戶有些稍微複雜一點的需求,常讓我改程式改到想翻桌。

後來接觸設計模式、 MVC 及 UnitTest 之後,一個新的購物車架構漸漸在我腦海裡成形。一來我不想再讓商品加入購物車、更改商品數量、促銷活動或是結帳等機制散落在各個 PHP 程式中,但我也不想讓它們完全集中在一個類別裡,那麼適當的架構分離就顯得非常重要。

於是乎,集合了多年的經驗,我在某個專案裡試做了一個新的購物車架構;而經過一段時間的線上測試後,事實證明它非常容易增加功能及修改功能,也更容易讓我們釐清整個購物流程。而且如果在良好的設計安排下,它也能做到模組化的功能抽換。我心中不由得吶喊:「就是它了!」

當然,這個機制並不是最好的,也可能無法因應所有網站的需求;但是這至少是我自己在電子商務技術這個領域的經驗,以及經過多次挫敗後所得到的成果。因此在以下的投影片裡,我將單純地就這個購物車機制來做一些探討,希望能為大家在架構的設計上,帶來一些不同的想法。

另外要提醒大家,這裡所提到的購物車架構,並沒有涉及所謂的後台商品上稿或是前台商品陳列等機制;換句話說,它不是一般我們所定義的購物車模組,請大家要先瞭解這一點。

閱讀更多

Web UI 測試的好幫手 - Selenium

一般 Web UI 怎麼測試它們運作是不是正確呢?例如說按下某個按鈕後,是不是跑出我們預期的結果?答案其實很簡單,找幾個人來試就可以了。

的確大部份的 Web 應用程式開發團隊如果不是工程師自己測試 UI ,就是讓工讀生或是負責這個案子的企劃來測試。但大家也都明白,這樣的測試真的是非常花時間,所以大部份的測試都是都是做到 70% 至 80% 就交給客戶了。

閱讀更多

台灣的軟體工程師

我常常問自己,台灣的業界生態真的適合開發軟體嗎?如果不適合,那麼軟體工程師們到底是為了什麼而選擇這個工作呢?

從網路上或是前輩口中所得到的大部份資訊裡,不難看出大多數的軟體工程師對於自己的職業生涯並沒有過於高深的期許;因為寫程式只不過是賺錢的手段之一,可以的話還是買買股票看能不能賺得比較飽。

以下,就我所看到的例子,來嘴炮一下大部份台灣軟體工程師的心聲吧。如有雷同,純屬巧合。

閱讀更多