难得看到讨论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)