如何告诉老板使用Xamarin不会提高工作效率

32

我是公司唯一的移动开发人员。在我被雇用之前,我的现任老板一直在考虑使用Xamarin,因为他们的市场营销说出了"共享代码"和"本地化"这些词语。 我认为自己是一个高级的Android开发者,因为我已经构建了很多大型信息系统。 现在我正在开发简单的应用程序,可以在一周内完成,但是Xamarin给我带来了很多麻烦,因为它太容易出现错误了,并且可重复使用的代码只有10%,而这10%的代码可以很容易地复制/粘贴到iOS中,尽管您可以共享这10%的代码,但有时仍然需要使用编译指令#if / #endif。

我的意思是,对我来说真的没有任何优势,因为我已经知道Java和Objective-C语言。我已经在iOS和Android SDK上拥有广泛的SQLite和数据存储知识,所以学习Xamarin会使工作变慢。

我已经尝试让他们不要选择Xamarin,因为你只能分享很少的代码,但他们似乎也不理解。

我需要一些好的理由来说服他们不要购买它,这样我就可以更加高效快速地完成我的工作。提前谢谢。


你应该在http://workplace.stackexchange.com/上提问。 - Midhun MP
1
向他们发送这个链接:https://www.youtube.com/watch?v=BKorP55Aqvg。 - R. Martinho Fernandes
6
4k不是很多钱,它只是他们支付给你的一小部分。找到更好的论点。 - zaph
9
如果你只能获得代码重用率的10%,那么要么你做错了什么,要么你的应用程序UI过于复杂,缺乏业务逻辑(数据存储和网络请求属于业务逻辑)。 - valdetero
Android开发非常缓慢,就是特别慢。部署到模拟器或真实测试设备的过程也很慢。 - kplshrm7
显示剩余2条评论
1个回答

45

Lee Whitney的博客中提到了一些要点:为何不推荐Xamarin进行移动开发

应用程序开销

基于Xamarin的应用程序具有内置开销,平均而言它们更大。这会影响设备上的下载时间和存储空间。最少需要额外几兆字节的空间,并且随着代码使用更多API,这个空间可能会成比例地增长。这是因为.NET组件中的代码会被静态链接(作为本机代码)到应用程序中,随着引用组件的增加而增加。在Android上,由于特定于操作系统的原因,应用程序启动时还会有额外的延迟。值得赞扬的是,Xamarin在减少此开销方面已经取得了很大进展。然而,对应用程序用户的影响仍然是可衡量的。

iOS和Android之间UI代码共享的限制

用户界面开发在iOS和Android之间不具备可移植性。
这意味着必须为每个平台使用和编写不同的API、事件逻辑、小部件和设计师。对于一些常见的低级操作,有一些例外。

Xamarin认为,在非常不同的平台之间尝试抽象UI API会增加不必要的复杂性或导致LCD(最低公共分母)设计的糟糕用户体验。他们在这里有一点道理。Titanium试图部分地实现此功能,结果使许多开发人员对不一致或不可预测的结果感到不满。HTML5应用程序在不强制使用LCD设计的情况下更成功地实现了此UI抽象,但它们没有Xamarin的本地性能。

UI问题可能是开发移动应用程序中最耗时的方面之一。尽管有很好的理由,但重要的结论是:对于许多移动UI问题,Xamarin将不会为开发人员或设计师节省时间。

限制代码在 Xamarin 外部的共享

Xamarin 不允许在其环境之外创建可重用组件或模块。例如,使用 Xamarin 编写的代码无法在本机或 HTML5 应用程序中使用。这意味着由使用 Xamarin 的团队开发的任何代码都不能与使用其他工具对 iOS 和 Android 进行开发的团队共享或重用。这在多大程度上会产生影响,取决于具体情况,但问题在于我们无法预测所有情况。因此,这是一个不舒服的限制,从一开始就存在。

生态系统和社区

这并不是 Xamarin 的错。哪家公司拥有与 Apple、Google 或 HTML5 相匹配的移动生态系统呢?然而,它很重要。当开发人员在搜索有关问题的信息时,如果能够找到10倍的结果数量,这将直接影响生产力。可用支持、服务和第三方组件以及相关工具的生态系统将继续比基于原生或 HTML5 的应用程序小得多。

第三个学习曲线

某些概念和技术需要特定于 Xamarin 环境的专业知识。这实际上为开发人员增加了第三个学习曲线,超出了编程语言和本地 API。例如,开发人员必须理解 iOS 引用计数以避免在 Xamarin 的垃圾收集中出现问题(Is this a bug in MonoTouch GC?)。另一个例子是数据结构和泛型以微妙的不同方式工作(http://docs.xamarin.com/guides/ios/advanced_topics/limitations)。这些是在实际采用新平台之前难以看到的问题,因此需要特别考虑。

更多的移动部件

Xamarin引入了它自己的一套bug,影响了产品质量和开发者生产效率。问题不在于Xamarin有一个糟糕的产品,而是将任何大型或复杂系统添加到应用程序工具链中都会带来不存在于原生应用程序中的问题和错误。

这些错误的历史记录可以使用Xamarin的Bug跟踪器(https://bugzilla.xamarin.com)进行查看。

是的,所有软件都有漏洞。关键是当您衡量添加新工具的优势时,必须考虑到新问题的劣势。

总结

最终,我们必须尝试量化像Xamarin这样的开发抽象相对于其他抽象或本地开发的优势。C#比Objective-C好吗?以我的意见来说,是的,远远优于Objective-C,但这只是其中的一个因素。当您将所有内容加起来时,它倾向于其他移动开发方法,例如2013年时我更喜欢本地代码解决方案或HTML5/Cordova解决方案。我喜欢它们的不同之处,并将尝试在另一篇文章中解释一些决策因素。


2
你应该将你的答案复制/粘贴到正确的网站上相同的问题中(http://workplace.stackexchange.com/questions/23945/how-do-i-tell-my-boss-working-with-xamarin-will-not-make-it-faster) ;) - Blo
2
提示:在引用其他来源时,应使用适当的Markdown块引用格式。虽然你在底部提到了你的来源,但直到那时,你才明显地引用了别人的网页。在将其复制/粘贴到Markdown编辑器中后,选择你所粘贴的内容并使用“blockquote”按钮——它看起来像一个弯曲的双引号字符。这将插入正确的markdown(大于号)以实现块引用。 - Chris W. Rea
13
这个答案已经过时了。这些问题都被 Xamarin 解决了。现在在 Xamarin.Forms 中可以实现90%的代码共享。 Microsoft 提供了很好的支持。 - Gobi M
2
你仍然需要为每个平台编写单独的代码,因为每个操作系统都有不同的API。你只能共享数据模型、HTTP请求等。当涉及访问本地组件时,你仍然需要为Android、iOS和Windows编写不同的代码库。 - Pancho
@GobiM 是的,如果你不需要本地UI,Xamarin Forms是可以使用的。在这种情况下,它也可以成为一个令人害怕的HTML5应用程序。 :) - Display Name
这个回答肯定已经过时了,特别是“有限的共享代码”部分。在过去的6年里,我发布了7个应用程序(每个应用程序都使用Xamarin Forms开发iOS和Android版本)。我的应用程序平均约有95%的共享代码。 - lyndon hughey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接