MVC 與 OO的思考
用flash開發ria 的人越來越多,而隨者flex的推出,現在大部份flash coder都已經聽過或大致瞭解 mvc/mvp 這幾種pattern的意義,甚至可能也實作過一些範例。
但最近越思考如何用flash實現真正完整的OO程式規畫,就越發現實際上目前大部份人在flash裏採的mvc並不是那麼的純正(當然有人會接者argue說為何一定要管純正與否?能work不就好了?這是個好問題,等日後有空再討論)。
簡單先整理一下目前的結論:
1、mvc是個pattern,就跟其它所有的pattern一樣也只是個方法論,因為要用何種技術去實作都是ok的,只是大部份pattern都是以物件導向技術為基礎做討論,因此讓人覺得pattern = oo (也就是說 mvc = oo)。
2、mvc 中的 view-controller 這一段是可以很合理的與model 切開分離的,這樣做可以保持彈性。
3、而model這一段,也就是oo分析裏面說的domain models (或三階架構用的 business objects)要如何實作,就不一定要是oo了,目前90%的書、網站範例與教學都是採用data-driven的方式來處理,例如將database傳回的資料放進recordset(或更極端的放進datagrid裏當容器),而不是依照java/net的手法,將這些recordset再建構成適當的object instance。
所以可以得知 model 這塊裏面,可以用 data-driven直接做掉(dirty and quick法),也可以乖乖的cast成適當的物件,而這裏採取的手法,就直接反應了程式師的編程風格與邏輯,是否要走物件導向,從這裏也就看得出來。
因此目前在使用mvc的flash開發者應該要清楚的知道,使用mvc不代表已經是物件導向,就像會用actionscript 2.0 也不代表就懂物件導向編程(試者問自已,上一次用interface是何時?真的瞭解為何需要 interface而不是inheritence就好?)
而至於OO這樣的方法對flash開發來說是不是 too overkill 這個問題(很巧的在flashcoder list上有一串精彩的討論,另外有一串 mvc what ? 也值得一看),大底上來說是永遠不會有答案的,只能說這是選擇的哲學,oo有它明顯的好處(你知道的,不外乎就是彈性、維護、重覆使用….),但也有為人垢病的地方(廢時、廢工…),但我認為全程採用oo是一個 trade-off 的選擇,的確選擇oo一開始要付出的學習成本非常高,甚至生產力會大幅降低,但一旦完全上手成熟後,可以確保往後十幾二十年的開發品質,因為這段學oo的過程,不但會完全改變一個人的coding方式與技巧,連思考一個問題的方式也會改變,變的更條理、模組化,因此自然比較有可能一開始就將事情做好。
當然我也不否認寫了十年的 C(或任何其它非oo語言)高手,也一樣有辦法規畫出結構良好,簡單易懂的程式,只要將程式段落分清楚、切乾淨,這一切也是有可能做到的,只是考量目前常見的語言(java, c#, as2, perl, python…)都已經物件化,而oo本身所提供的思考方式與功能,不用似乎太可惜,再加上如果將來真的想將flash做為開發大型企業應用程式(不論是用flash或flex),擁有完整且成熟的oo經驗已經是不可或缺的了。
所以,是該時後開始學啦。
ps. 經常被問到如果想學好flash 00的開發該看什麼書,過陣子我會試者列出清單,如果有電子書的部份也會想辦法放上網路。不過可以先給大家一個基本方向,以我的感覺,目前flash的進階書中,真正講到完整oo的並不多,colin moock那本EAS2.0(趙英傑先生已經完成翻譯並出版)可以提供學習 as2.0這個語言的完整教材,但對於用oo實作專案則明顯不足(書中那兩個例子都太單純不足以呈現實務中必然面對的挑戰)。
如果真要找書,我建議朝 java/.net 的方向去看,找一本從頭介紹 OOAD 與 code實作的書來看完,或許你看不懂書中的語法,但介紹概念的部份仍然非常值得學習,邊看邊想怎麼用actionscript去實作,並且結合flash的某些特性,就會覺得大獲啟發了。


2 Comments Add your own
1. jerome&hellip | September 5th, 2007 at 10:55 am
您這篇文章寫的不錯,有好的思考模式,才能產生好品直的程式。
2. Benson Yang&hellip | June 19th, 2008 at 1:57 pm
Personal very agree your below comment, thx.
——————————————–
但我認為全程採用oo是一個 trade-off 的選擇,的確選擇oo一開始要付出的學習成本非常高,甚至生產力會大幅降低,但一旦完全上手成熟後,可以確保往後十幾二十年的開發品質,因為這段學oo的過程,不但會完全改變一個人的coding方式與技巧,連思考一個問題的方式也會改變,變的更條理、模組化,因此自然比較有可能一開始就將事情做好。
Trackback this post | Subscribe to the comments via RSS Feed