剛剛收到一位學員提問的問題
XF用mvvm開發的好處? prism 和 cross-platform 開發(優劣)差異? (我發現寫在viewmodel 內 程式碼要多好多)
這個問題有相當多的 Xamarin.Forms 開發者都會有這樣的問題,我先簡單地描述問題中的各個技術名詞
在 Xamarin.Forms 中,所有的 UI 可以透過 XAML 宣告標記語言來描述出來;而在 XAML 定義 UI的過程中,我們是無法直接在 XAML 中撰寫商業邏輯到這個語言中(您也可以選擇不用 XAML,直接使用 C#來定義UI)。想要在每個頁面撰寫出各個商業邏輯處理程序與方法,您有兩種選擇 Code Behind / MVVM (Model View ViewModel)
而 Code Behind 的開發方式,則是非常舊的開發技術,那是之前在 Windows Forms 那個時候的開發技術採用的,它個優點是簡單、方便,缺點是它的頁面與商業邏輯程式代碼綁在一起,想要共用或分享上,會有些困難。
在進行 XAML 這樣 UI App 開發的時候(如 Xamarin.Forms),我們都會採用 MVVM 的開發方式 (若您在進行原生 Android / iOS 專案開發的時候,也是可以使用 MVVM 的開發方式,而不是使用這兩個原生平台提供的 MVC 開發方式)。
採用 MVVM 的開發方式,可以讓您的 XAML 頁面(View) 與該頁面的商業處理邏輯( ViewModel )徹底切隔開來,具有關注點分離的好處;也就是說,不會因為您變更了 XAML 內容,就導致 App 無法正常運作,反之亦然。因為商業邏輯都放在 ViewModel 內(與 UI 毫無關係),因此,您可以在這裡進行自動單元測試,確保 App 品質。
Prism 是一個開發框架,它幫助你建立一個具有相依性注入容器的 Bootstrap 相關程式碼,事先幫您建立好,讓您可以輕鬆的使用這些功能:ViewModel 自動綁定、導航服務、XAML行為擴充功能、事件聚合器、相依性管理服務、頁面對話窗等等(若您有使用過 Code Behind來開發過 App,而您又使用過 Prism 這些功能,您將會愛上 Prism 的這些功能所帶來的好處)。
採用預設專案樣板的 cross-platform 開發,您也是可以選擇搭配 MVVM 的開發方式或者使用 Code Behind 的開發方式;可是對於許多再進行 MVVM 開發方式的時候,會用到的許多需求,您都需要自行擴充與設計,例如 INotifyPropertyChanged INPC 這樣的機制,你需要寫出一個這樣的基底類別或者在每個 ViewModel 實作出這個介面等等。
當然,不論您使用 Prism 或者是 cross-platform 開發方式,您也可以全部都使用 Code Behind 開發您的 Xamarin.Forms App(完全不使用 MVVM 方式,使用事件綁定的方式),也有人喜歡使用 C# 來寫出整個 Xamarin.Forms App (也就是不使用任何 XAML 標記宣告語言),這些開發技術都是可以選擇的。不過,在使用 Code Behind 開發的時候,您需要去處理一些其他的問題,才能夠讓您的 App 開發上更加靈活。
還有一點我建議採用 MVVM 架構開發方式的理由是,當您遇到問題,而在網路上尋找問題解答的時候,大部分都會提供 MVVM 的解決方案(當然也會有 Code Behind的解決方式),不過,網路上相當多的 Xamarin.Forms 高手,都是採用 MVVM + Prism 的方式開發,對於這些高手寫的文章與提出的解決方案,對於同樣採用這樣開發技術的人,是更有加分的好處。
最後,青菜蘿蔔各有所好,使用您覺得好的開發方式,黑貓白貓,會抓老鼠的就是好貓,只要能夠開發出您要的 App 的技術,就是您要的技術。(若有遇到問題且專案全部都使用 Code Behind 開發,很抱歉,我無法對您提供任何有用的幫助)
若您一定要問我,Vulcan 您會選擇哪個方式,我會選擇 Prism + MVVM
沒有留言:
張貼留言