MVC 與 OO的思考

In actionscript, engineering   February 23, 2005 - 1:31 pm

用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的某些特性,就會覺得大獲啟發了。

by admin

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方式與技巧,連思考一個問題的方式也會改變,變的更條理、模組化,因此自然比較有可能一開始就將事情做好。

留言回應

hidden

您的留言會先經過站長認証後才刊登在網站上。
your comments will be approved by Administrator before appearing on the page.

Trackback this post  |  Subscribe to the comments via RSS Feed

mobile phone