作者s89227 (Kei)
看板Soft_Job
標題Re: [請益] xamarin
時間Sun Aug 26 19:49:00 2018
難得看到討論Xamarin的文章
身為使用Xamarin一年左右的菜比八來分享一下個人看法
並試著用工程師角度和公司角度提供一些想法
前情提要:
在學校只寫過C、Python和極少的C++
進到公司後開始學習C#
目前語言熟練度 C# > Java = Swift = Obj-C
因為公司是抓原本的工程師們來摸索APP開發
所以造就了現行產品們有原生、有Xamarin、也有Xamarin.Form
又因並不是所有專案都會同時開發及維護
分到哪個專案就要寫哪種語言
所以目前是
Xamarin.雙平台(C#)
Xamarin.Form(C#)
Android(Java)
iOS(Swift&Obj-C)
都能寫的狀況
首先先來簡單說一下Xamarin
Xamarin其實分成兩種
一種是Xamarin雙平台
也就是照著平常寫Android和iOS的方式來撰寫APP
只是語言改成使用C#
但整個Life Cycle、Activity/ViewController等等的觀念都跟原生一樣
也同樣使用AXML和StoryBoard或Xib拉畫面
不過無關乎Android及iOS層的資料和資料邏輯層可以共用
也就是這部份只需要一份程式碼就可以了
而另一種是Xamarin.Form
是屬於Xamarin自己的框架
裡面沒有什麼Activity、Fragment、ViewController之類的東西
而是有屬於自己的LifeCycle和Page
畫面使用自己的XAML格式
從畫面到資料都只需要寫一份Code就可以了
真的需要雙平台各自處理的部分
再寫各自的渲染即可
渲染的部分一樣使用C#
使用Xamarin
基本上在手機上的效能表現而言其實並不會比原生差
因為它並不是先把C#轉回原生再使用
而是自己比照原生語言製作了跟底層的溝通
細節有興趣的人可以去查看相關文件及統計資料
工程師角度:
開發的語言與框架能具備
- 好寫 越多語言及框架幫你處理好的東西越好
- 快速 需要寫的東西越少越好,並盡可能的共用
- 穩定 不會莫名其妙壞掉,一更新好了這個壞了那個
對於原本就熟練C#與.NET的人來說
Java、Obj-C和Swift缺少很多慣用的類別及方法可以使用
(個人覺得Java很囉唆,Obj-C有點過時)
雙平台可以共用資料邏輯層很省事
而UI可以只寫一份的話更好
但穩定度確實差原生一截
公司角度:
產品的開發具備
- 快速 工程師需要的開發時間越短越好,不論是開新產品或增加需求
- 穩定 產品越少Bug越好
- 省成本 每次開發需要的工程師數量越少越好
這時候就要看產品特性了
有些產品注重資料的呈現
有些產品則是對畫面及操作的細節講究
對於注重資料呈現但對於畫面及操作細節沒那麼要求的產品
Xamarin(特別是Xamarin.Form)可以做到快速與省成本
而穩定度的欠缺會因對畫面及細節的不要求而影響程度不高
其實是個不錯的選擇
但對於畫面及細節要求的產品
由於Xamarin依舊需要處理大量的渲染
又比較常發生特定版本的某些功能會壞掉的狀況
Xamarin的缺點比優點來得多
使用原生甚至搭配C++開發會是更好的選擇
最後就我而言
其實Xamarin並沒有前幾篇文章下面推噓文講得那麼差
它有優勢但也有缺點
確實業界內使用Xamarin開發的公司不多
但也不是沒有
依需求和團隊狀況考量
不同的公司應該會有不同的選擇
寫到現在一年多
覺得不論是它本身或是VS for Mac都有越來越穩定
個人認為它的未來是可以期待的
(至於一些信仰問題,在這邊不列入討論,
每個人對個語言、框架和公司等等的信仰都不一樣,
雖然這篇文章多少也有一些我的信仰在裡面XD)
--
1F:推 yu800910: 順便問一下史蓋到底是不是偽娘?(舉手04/26 10:47
我是喜歡異性的堂堂男子漢好嗎...
2F:推 ruby0509: 對不起 我看成史蓋喜歡堂堂男子漢.... 04/26 11:37
3F:推 apple1969: 看成史蓋喜歡堂堂男子漢 +1 (掩面 04/26 11:45
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.226.104.198
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Soft_Job/M.1535284144.A.647.html
4F:推 aaz123456789: 蠻好奇你怎麼學這套的 網路上資源很少啊 直接看文 08/26 23:20
5F:→ aaz123456789: 檔嗎 08/26 23:20
6F:推 m339606: 推心得! 我在MacDev板也有Xamarin的相關心得,想了解的 08/27 00:12
7F:→ m339606: 話可以參考一下 08/27 00:12
8F:推 neo5277: msdn 08/27 08:56
9F:→ neo5277: 然後有專門研究網站喔 08/27 08:57
10F:推 bf000777966: 老實講我很好奇那個XARAMIN到底是怎樣運作的,它是 08/27 12:13
11F:→ bf000777966: 把整個RUNTIME都搬過去嗎,還是直接編譯成NATIVECOD 08/27 12:13
12F:→ bf000777966: E,如果這樣,一些功能不就沒有了嗎,像是GENERIC 08/27 12:13
13F:推 neo5277: 基本上他還是叫用原生API 08/27 12:26
14F:推 liddle: iOS 上,Xamarin 就是直接編譯為 LLVM IR Code 然後丟給 X 08/27 20:19
15F:→ liddle: code。Android 上就是一個 NDK app。有 runtime。 08/27 20:19
16F:推 m339606: iOS與Android做法不同,推薦還是直接去看管方文檔了解一下 08/28 00:55
17F:→ m339606: 細節比較好 08/28 00:56
18F:→ luluking: 分開學比較實際 除非你只想寫些騙騙人的小東西 09/03 09:44