Re: [请益] xamarin

楼主: s89227 (Kei)   2018-08-26 19:49:00
难得看到讨论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)
作者: yu800910 (扫地娘)   2017-04-26 10:47:00
顺便问一下史盖到底是不是伪娘?(举手
作者: ruby0509 (鹿皮)   2017-04-26 11:37:00
对不起 我看成史盖喜欢堂堂男子汉....
作者: apple1969 (苹果坏坏)   2017-04-26 11:45:00
看成史盖喜欢堂堂男子汉 +1 (掩面
作者: aaz123456789 (bbbbbbbba)   2018-08-26 23:20:00
蛮好奇你怎么学这套的 网络上资源很少啊 直接看文档吗
作者: m339606 (mize)   2018-08-27 00:12:00
推心得! 我在MacDev板也有Xamarin的相关心得,想了解的话可以参考一下
作者: neo5277 (I am an agent of chaos)   2018-08-27 08:56:00
msdn然后有专门研究网站喔
作者: bf000777966 (joe)   2018-08-27 12:13:00
老实讲我很好奇那个XARAMIN到底是怎样运作的,它是把整个RUNTIME都搬过去吗,还是直接编译成NATIVECODE,如果这样,一些功能不就没有了吗,像是GENERIC
作者: neo5277 (I am an agent of chaos)   2018-08-27 12:26:00
基本上他还是叫用原生API
作者: liddle (Guderian)   2018-08-27 20:19:00
iOS 上,Xamarin 就是直接编译为 LLVM IR Code 然后丢给 Xcode。Android 上就是一个 NDK app。有 runtime。
作者: m339606 (mize)   2018-08-28 00:55:00
iOS与Android做法不同,推荐还是直接去看管方文档了解一下细节比较好
作者: luluking (luluking)   2018-09-03 09:44:00
分开学比较实际 除非你只想写些骗骗人的小东西

Links booklink

Contact Us: admin [ a t ] ucptt.com