iT邦幫忙

0

設計網頁到底用框架好還是用範本呢?

小弟是用php + MySQL寫的(我是新手)
開始是用範本為主來編寫,但這樣的缺點是寫完後有好多頁
後來慢慢改用框架(include某檔案),發現很好用
而且我在想,用框架後是不是程式就可以模組化
程式碼不用再和html混在一大頁面裡,每次寫留言板都像在重寫一樣

但我不知道以框架來寫,會不會有怎樣的缺點
例如,聽說如果寫購物中心的話,若產品以框架呈現,當某A複制連結給某B介紹這個產品時
網址是帶不出產品的

有請各位前輩為小弟指點一下,謝謝

12
fillano
iT邦超人 1 級 ‧ 2010-09-26 20:44:23
最佳解答

你這個問題其實還蠻大的,有意識到需要把View與程式做分離是一個好方向。

能用範本的話(你是指template吧?希望我沒會錯意)用範本是個比較好的方法,而且共用的地方還是可以用include來重複使用。框架(我想你是指frame?)在html5裡面會拿掉,能不使用的話還是漸漸不使用比較好。

前一陣子聽Jace Ju講過「Web程式重構」這個主題,如果你希望程式架構可以更有彈性更容易維護,不妨參考一下:
http://www.slideshare.net/jaceju/web-1494836

如果想利用一些php framework來組織你的php軟體,CodeIgniter是個不錯的進入點,雖然功能不夠強,但是夠簡單,比較容易進入。

如果你的程式是以資料管理為主,例如後台管理介面,有時候使用範本或是hardcoding都太費事,這時可以考慮用一些基於資料model跟form產生的方法來做,這樣只要建立好資料model,透過表單定義、資料mapping及關聯定義等,用程式很快就可以產生介面。

v121020 iT邦新手 5 級 ‧ 2010-09-28 07:20:15 檢舉

看完「Web程式重構」,真覺得這是大工程啊
不過也表示當「Web程式重構」很完整時,在維護上一定很方便

8
iyeshome
iT邦新手 5 級 ‧ 2010-09-26 17:49:30

我的經驗是直接拿範本修改,再加上模組化的整合,上線的速度會快很多。

6
godstamp
iT邦新手 3 級 ‧ 2010-09-28 01:34:44

這種問題嘛..要看需求、用途和環境來決定..

如果要快速架站,有很多開源社群提供的套件,功能相當完整,同時還考慮到很多你沒考慮到的版本、效能、安全、擴展... 等問題,只要專注研究該套件就可以了。

如果是寫後端系統,可能要配合ajax技巧讓使用者用起來像應用程式一樣方便,當然就不能老是以網址傳值的方式一直在換頁。

如果像你說的某A複製連結給某B介紹產品,那可能就要做成呈現結果都像獨立頁面一樣,而不能像應用程式那樣。但還是能做到單一接口接收參數呈現不同頁面結果,就看你的系統底層如何規劃。

另外也要考慮到架設環境,目前市面上的虛擬主機多為 PHP 5.2x + MySQL 5.0x,這時候可能不能是用太新或過舊的東西來寫,當然,如果你是自行架設的,就比較沒這種問題。

不過,並非大量使用框架或引入檔案,就表示系統是模組化了;由於我們公司都是自行架設,完全配合我們需求的環境,所以我偏向從程式底層架構全都自行製作,PHP5已相當適用以物件導向來建構系統,特別是 PHP5.3 之後,善用 namespace (名稱空間)和 autoload,完全以 class 來撰寫,降低每個 class 的耦合度,整個系統剩沒幾行的 include 和 require,但複用性極高,可以大量降低重複程式碼與多餘程式碼,而且也改善可讀性和將來擴充的難度;寫下一套系統還可以直接拿來用,大大提升工作效率。

如果你是個程式新手,而且想深入研究程式這個領域,建議可朝物件導向的方向學習,會很有幫助(曾經在程序導向轉為物件導向時,吃了不少苦頭...習慣和觀念很難改過來^^);在那之前... 先學會寫 class,提供個網址給你參考,這裡寫得還蠻容易懂的..
http://203.68.102.46/online\_book/content.php?chapter\_sn=191

另外,上頭的 fillano 大大提供的「Web程式重構」連結,內容相當棒,非常值得學習,小弟先收藏起來囉~^^

v121020 iT邦新手 5 級 ‧ 2010-09-28 07:31:59 檢舉

wow~
物件導向,真的沒用過耶;因為我現在一直困在程序導向中,自己深深覺得有某些方法可以克服這類的障礙,但一直找不到解決方式
可否請您再詳述class的功能可應用在何種程度上?覺得和function是不是差不多呢?

fillano iT邦超人 1 級 ‧ 2010-09-28 08:49:09 檢舉

使用class的話,可以應用的方法就多了。不過你還沒接觸物件導向,不知道跟你介紹design pattern適不適合...

另外,function也是由來已久的重複使用程式碼的方法,只是有一些限制。class是包含資料與處理方法的,function只包含處理方法,要達到跟class一樣重複利用的能力,就可能會用到global變數,但是依賴global變數會讓程式比較脆弱。

PHP是腳本語言,有一些方便的地方。例如使用include/require,搭配檔名約定與同名的function,就可以模仿出strategy pattern。舉例來說,你的系統裡面需要處理金流,而且需要動態跟不同業者介接,那可以怎麼做?金流的流程可以粗略分成資料送出到金流服務跟從金流服務接收資料。這樣你會怎麼設計function來讓系統可以動態連接不同金流呢?

如果要我設計,我可能會把每個金流服務連接需要的程式集中到一個檔案,裡面有兩個function,before()負責送出資料,after()負責接收資料。這樣只要include連接不同金流業者的檔案,統一呼叫before()跟after()就可以抽換金流,主程式都不用改。等等...所以單靠function也可以做到不少事情,關鍵是你怎麼設計。

我要發表回答

立即登入回答