作者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/cn.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