一些移动应用程序仅设计为移动应用程序。这些应用程序在移动平台上的使用比在标准 Web 上更多。也许,如果移动应用程序也在浏览器中实现,其功能将毫无用处。
其他移动应用程序是与现有的 Web 应用程序一起开发的。在这种情况下,移动应用程序在一个代码库中开发,而 Web 应用程序则在另一个代码库中开发。虽然这是一种策略,但在代码复用、测试和总成本方面,它确实存在一些不足。
当然,在 2009 年,当所有移动应用程序都必须使用其原生语言(Obj C 和 Java)编写时,选项很少。即使网站版本在后端使用了 Java,服务器端 Java 的概念和实现也与 Android 平台上的实现大不相同。因此,没有代码可以共享。
在 2016 年,我们生活在一个截然不同的环境中。如果在我职业生涯初期,有人假设 Javascript 会成为一种主流的服务器端语言,我会嘲笑他们。哇,我被打脸了。
随着我们专注于以最小的成本获得最大的收益,我们必须扪心自问,如何在我们的移动和基于浏览器的应用程序之间共享代码。当然,我们都希望获得纯粹的原生移动体验,拥有极快的性能和标准的原生外观和感觉,但代价是什么呢?
NativeScript 团队在过去一年中一直在与 Google 的 Angular 2 团队直接合作。他们共同开发了一个非常强大的 NativeScript 和 Angular 2 的 alpha 版本。使用此组合,可以在移动和浏览器版本的应用程序之间轻松共享非常高的代码百分比。事实上,在许多情况下,唯一的区别在于描述视图层的代码片段。这是一件好事,因为在浏览器中运行的应用程序的正确 UI 几乎永远不是在移动上下文中运行的应用程序的正确 UI。
让我们看看一个示例,说明如何在使用 NativeScript 和 Angular 2 编写的移动应用程序之间共享代码,以及如何在使用 Angular 2 编写的基于浏览器的应用程序之间共享代码。您将看到平台特定的 UI 文件与 Angular 2 组件声明分开。
为了真正强调代码复用这一点。NativeScript 团队非常小心地实现了尽可能多的 Angular 2 API。这意味着当您在 Angular 2 模型层中使用 XMLHttpRequest 时,此命令也可以在您的 NativeScript 应用程序中按原样复用。在下图中,您可以看到一个示例,说明如何在一个代码中描述一个通用调用,并在适合最终运行时移动设备特定平台 API 的方式下实现它。
我们对 Angular 2 的实现尚未完成,但这没关系。Angular 2 也未完成。我们每周都会与 Angular 2 团队会面,讨论计划和方法。我们会发布我们的笔记,因此,如果您对我们正在开展的工作感到好奇,可以在这里阅读所有相关信息:https://docs.google.com/document/d/1J6fZcVbVa6uONVCJIox2A3Jn5TWgspLufmryfA1OXGk/edit
敬请期待有关 NativeScript 和 Angular 2 的更多信息!