現在開發app也好,桌面程序也好,有很多不同的技術可以選擇。那么,什么時候應該選用Xamarin呢?
5 questions to consider before choosing Xamarin
1 是否需要跨平台?
根據公司情況、團隊大小。如果每個平台有足夠的開發人員,那么就不需要跨平台了。如果一共也就那么一兩個人,需要開發安卓、iOS app,那么跨平台可能是一個比較好的選擇。如果還要開發uwp程序,Xamarin就又有優勢了。
如果不需要跨平台,就不必選用Xamarin了。
2 是否同時還要開發桌面程序,Windows? Mac?
如果同時還需要開發桌面程序(Windows或Mac),跨平台的概念也就更大了。這時Xamarin會是個比較好的選擇。因為Xamarin的xaml和Windows很接近,和Windows 10 UWP中Xaml更接近。而且Xamarin還有支持wpf的計划,Xamarin在mac上的預覽版也已經出來。詳見 Glimpse the Future of Xamarin Forms 3.0
所以如果還跨平台到Windows Mac,Xamarin的優勢就徹底發揮出來了。
當然這里還得提一下JavaScript的的electron。
3 已有的技術儲備是什么,熟悉什么編程語言平台?
有的人說編程語言不重要,2個星期任何語言都搞定。這里說的是泛義上的編程語言,包括它的各種lib支持,思考方式。各種模塊是否已經有成熟的實現,網上是否有各種例子。真正熟悉到相關的編程生態,2-3年不為過。
如果是從c#過來的,和Xamarin會天生好感,里面async await用的很溜啊。網上各種跨平台的c#庫也很多。如果還有很多既有的模塊是c#開發的,比如通訊協議,商業邏輯,那么選Xamarin想都不用想。
如果是從web技術過來的,熟悉javacript,react native倒是個不錯的選擇。好像javascript老是被提及啊?是的。javaScript在問題1 2 3 4里都是個不錯的選項,就看你喜不喜歡這個語言了。
從java過來的呢?老老實實研究android專一平台,就不要趟跨平台的水了。研究kotlin也行啊。
c++過來的呢?回到第一個問題,先回答那個問題。
python 和 go呢?這么高大上的,往AI、cloud看看吧,別走彎路了。
那么Xamarin適合誰呢?熟悉或者願意學習c#語言的,大多也就是原Windows程序員或asp.net程序員,團隊不大,必須跨平台開發。現有一些c#開發的代碼或者庫可以復用。
下面還有兩個問題,可以考慮一下。如果有共鳴,也算加分項。
4 Declarative UI
什么是declarative ui呢?就是UI的編寫是申明一樣的。Android的axml/xml是,web中的html、css都是;MFC嚴格的說不算,wpf的xaml算;iOS里面那個啥storyboard, xcode的Interface Builder都不算。qt的qml算。
其實UI的發展,web是走在前面的,wpf android qt都跟上了,xcode原地踏步,聽說很多人都是用代碼直接寫UI的,高手啊。
Xamarin.Forms是用的xaml, 編寫的時候是申明式的,后台會用原生的控件來顯示。這也是為什么Xamarin強調自己是native app的原因之一。
另外,使用Xamarin,不一定要用Xamarin.Forms,完全可以用native的Xamarin,繼續使用Android的xml文件來寫UI,或者繼續用interface builder。這種情況下,Xamarin只起到了一個編譯語言的作用,然后把java class/api搞了一個一一對應的c#版本。熟悉Android api的可以用這種方式寫。一一對應的哪種程度呢?看文檔查好java api,直接寫Xamarin c#代碼沒任何問題。objective c麻煩一點,swift的api文檔轉c#基本可以看懂。
iOS寫UI是最煩的,沒有之一,比mfc還煩。最敬仰iOS里寫UI的大拿們。
如果UI需要更復雜一些,甚至每個版本都要變,就像常用的jd taobao,用web技術的react native就有優勢了。
5 MVVM
沒聽說過的可能不知道它的強大,一旦熟練使用后,在更換任何一個技術時都會查一下新技術是不是支持mvvm。它和declarative UI是同時發威的,利用bingding,把ViewModel獨立出來更好的跨平台,簡化UI的編寫工作,是跨平台程序寫平台無關代碼的利器。
MVVM由wpf開創,Xamarin.Forms很好的繼承了這一點。現在Android也在學data binding哦。
選一門技術,要分析要開發的產品的特點,如何提高開發效率。不同的選擇,可能是成倍的效率差別。Xamarin可以在某些場合是個不錯的選擇。