什么时候该选用Xamarin?
现在开发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可以在某些场合是个不错的选择。
什么时候该选用Xamarin?的更多相关文章
- 1、 小白带你入坑xamarin系列之环境搭建和准备
重点提示 由于xamarin发展更新很快 目前教程部分内容已经过时 请注意下载最新版本 2018.05.23 www.xamarin.com 1. 小白带你入坑xamarin系列之环境搭建和准备 ...
- [Architecture Design] 跨平台架构设计
[Architecture Design] 跨平台架构设计 跨越平台 Productivity Future Vision 2011 在开始谈跨平台架构设计之前,请大家先看看上面这段影片,影片内容是微 ...
- 老司机学新平台 - Xamarin开发环境及开发框架初探
随着被微软收购,最近一年间,Xamarin的火爆程度与日俱增.免费.更好的VS2015集成.更好的模拟器,甚至,在windows上运行和调试iOS平台程序,让我这样接触了十几年.NET平台的老司机,即 ...
- Mono、Unity和Xamarin三者关系
1.Mono: .net是微软出的标准.如果站在Mono的角度来说,这套标准能规定编译器产生一些符合一定条件的文件出来,这些中间文件最后在目标平台上被解析成跟机器相关的东西.问题是,开始只有Windo ...
- 使用Xamarin实现跨平台移动应用开发(转载)
刚在朋友圈看到张善友,转发的一条分享“使用Xamarin实现跨平台移动应用开发”,写的确实很详细得体,从收费到开源,这段时间xamarin受到不少质疑,如此文http://blog.csdn.net/ ...
- 教程:如何手动安装Xamarin与Xamarin for VisualStudio
[2016/4/17更新:如果你下载后发现仍然需要付费才能编译Android/iOS APP,请到文章最下面更新Xamarin for VS和Xamarin Studio到最新的版本.Build201 ...
- Xamarin.Forms之XAML
官网参考 XAML基础知识 XAML(eXtensible Application Markup Language)可扩展应用程序标记语言,允许开发者在Xamarin.Forms应用中采用标记而不是代 ...
- Xamarin+Prism开发详解六:DependencyService与IPlatformInitializer的关系
祝各位2017年事业辉煌!开年第一篇博客,继续探索Xamarin.Forms… 为什么我做Xamarin开发的时候中意于Prism.Forms框架?本章为你揭晓. 实例代码地址:https://git ...
- xamarin DependencyService源码阅读
xamarin在面对PCL无法实现的各平台特有功能时使用了一种叫[DependencyService]的方式来实现.它使得xamarin能像原生平台一样做平台能做到的事情!主要分四个部分 接口:定义功 ...
随机推荐
- 使用 PHPStorm + Xdebug 实现断点调试(二)
一.配置 Xdebug 配置 Xdebug 相关参数,在 php.ini 文件中新增如下配置,如果没安装的,请参考<PHP 安装 Xdebug扩展>: [xdebug] xdebug.re ...
- 【算法系列学习】[kuangbin带你飞]专题十二 基础DP1 B - Ignatius and the Princess IV
http://www.cnblogs.com/joeylee97/p/6616039.html 引入一个cnt,输入元素与上一个元素相同,cnt增加,否则cnt减少,当cnt为零时记录输入元素,因为所 ...
- 蓝桥杯-搭积木-java
/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: ...
- 最长递增子序列hdu1087
#include<map> #include<set> #include<list> #include<cmath> #include<queue ...
- 关于echarts的那些事(地图标点,折线图,饼图)
前记:离上一篇博客的发布已经过去两个月了,这期间总想写点什么,却怎么都写不出来,一直拖到了现在.现在的感觉,不是像这期间一样,想好好整理一番,写一篇好博客,却写不出来.事实发现,随心就好,较好的博客, ...
- ObjectARX自定义实体的最近点和垂点捕捉算法
最近点用pickPoint来计算,垂点用lastPoint计算. 一般AcDbCurve类可以用AcGe类的 getClosestPointTo 来实现计算需要的点值. 下面是代码示例: case A ...
- C++中发声函数Beep详解
By zhcs 以前,我听过一个神犇用C++函数做的音乐,当时的心里就十分激动:哇,好厉害啊,好神啊. 这次,我终于通过自己无助的盲目的摸索.研究,写出了这篇文章(此时我的内心是鸡冻的233) 下面是 ...
- SOM网络聚类完整示例(利用python和java)
下面是几个城市的GDP等信息,根据这些信息,写一个SOM网络,使之对下面城市进行聚类.并且,将结果画在一个二维平面上. //表1中,X.为人均GDP(元):X2为工业总产值(亿元):X.为社会消费品零 ...
- LNMP之编译安装PHP出现的问题
2010年以前,互联网公司最常用的Web服务组合就是LAMP(即Linux.Apache.MySQL.PHP),近几年随着Nginx Web服务的逐渐流行,又出现了新的Web服务环境组合--LNMP ...
- FileZilla可以连接但是传输文件失败
在linux本地创建文件夹后,用FileZilla传输文件失败了. 如果用的是普通用户,创建的文件夹是属于root用户.所以不能传输,没有权限. 修改权限:sudo chown -R lishengn ...