新型应用程序

设计跨平台的现代应用程序体系结构

Rachel Appel

Rachel Appel无论您是重头设计一个项目,还是修改一个现有的解决方案,了解现代应用程序领域的情况很重要。这意味着可辨别哪些设备、操作和浏览器需要注意。而且,“设备”并不仅仅是指智能手机,也包括平板电脑、个人电脑和大型桌面设备屏幕。然而,智能手机的销售量仍然远超其他各种设备的销售量。一些开发人员甚至不得不考虑将可穿戴设备作为跨平台体系结构的一部分。

关键问题在于目前编写软件意味着编写适用于多种设备的软件。基本目标是跨越多个平台共享尽可能多的代码,这样您需要编写最少的代码。这将帮助您更快地提供产品或应用程序。使用不同的语言重新编写相同的逻辑也很少会出错。

跨平台设备开发

您进行跨平台开发的方式取决于您已经安装的软件类型。如果您希望在 Web 站点上共享内容,则混合解决方案可能是最佳方案。如果它是一个成熟的站点,则可以将其转换成响应式设计,并且支持移动设备。您可以舍弃所有的移动站点,并且只提供一个 Web 站点和单独附带的本机应用程序。其他要考虑的因素是:该应用程序是否只是呈现站点内容的其他方式,或者该应用程序是否可以因其内容而独具一格。

首先创建您的移动站点,然后创建本机应用程序。在您开发本机应用程序时,移动站点可充当应用程序,直至您覆盖了所有平台。那些已创建和运行站点的平台可能需要在每种设备的本机上获取该内容和功能。按照这种方式开发本机应用程序的同时,可以继续增长您的移动用户群。当您准备好编写本机应用程序时,可能需要帮助以决定使用哪种语言。因此,请确保查看我在 2013 年 9 月的专栏—“了解可用于开发现代应用程序的语言选择”(msdn.microsoft.com/magazine/dn385713)。

虽然开始开发最大的平台或具有最高设备销售量的平台的概念变得流行起来,但有时首先开发含有与您的要求并行的功能的平台是更好的商业决策。例如,记录食物和锻炼的保健应用程序可能要求展示饮食和活动的汇总,myFitnessPal 就是 Windows Phone 上此类应用程序的典型示例。此类数据最适用于 Live Tile,而且该数据只能在 Windows 平台上获取。

通过列出您所有的主要应用程序功能,您可以了解您的要求是否匹配该平台。通过验证每种功能是否受到每个平台的支持以及受支持的程度来检查每种功能。其中,您可以看到与特定硬件功能的区别,如照相机或操作系统功能(如图块或语音识别)。30,000 英尺视图中的体系结构选项可以让您在以下三个方向之一进行选择:本机应用程序、混合应用程序或 HTML5 移动 Web。

本机 这表示将全部精力移至适用于每个平台的单独应用程序。这些平台可能是 Windows Phone 8、iOS 和 Android。从某种程度上说,诸如 BlackBerry 之类的平台也适用。每个应用程序都会充分利用每个独立平台提供的特定功能。本机应用程序效果不错,但是,您必须记住,要编写稳定且简洁的代码,因为当您不注意时,性能会快速地下降。您至少需要为每个平台单独编写本机应用程序 UI,因此按平台计算的成本将是所有这些选择中最昂贵的。

混合 在本机和 Web 之间的某个灰色区域是混合应用程序。混合应用程序通常将现有 Web 站点中的内容集成到适用于本机包装和部署的应用程序。这对于在任何应用商店中占据一个空位并进行展示十分有用,也许同时可在该平台的完全本机应用程序上运行。众所周知,性能比本机和 Web 应用程序慢,因为混合应用程序通常通过将现有的 HTML 打包到容器中构建而成。例如,在 Windows Phone 上,这是一个 WebBrowser 控件。任何时候都会存在一个额外的层,而且还存在潜在的性能问题。

不过,折衷的是,可在本机平台上快速部署。创建混合应用程序要求您使用以下任一工具:

  • Apache Cordova/PhoneGap
  • Visual Studio Windows Phone HTML5 项目模板
  • Telerik AppBuilder(以前称为 Icenium)
  • Xamarin Studio

基于它们的特性,混合应用程序使用 WebBrowser 控件(这是一个 XAML 元素)(继续使用 Windows Phone 示例)封装 Web 内容:

<phone:WebBrowser x:Name="Browser" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Loaded="Browser_Loaded" NavigationFailed="Browser_NavigationFailed" />

以上就是构建混合应用程序入门须知。在其他平台上,虽然控件可能不同,但是概念相同。构建混合应用程序时要非常小心,因为它们可能没有执行本机应用程序将执行操作的权限。这是因为有可能会使来自 Web 的未授权脚本在客户端上执行。这就是 HTML 应用程序含有许多相同限制的原因。

创建混合应用程序时,您可以使用 Telerik AppBuilder 或 Apache Cordova,而非 Visual Studio 项目。这些第三方工具可以帮助弥补应用程序的混合 Web 感觉和本机观感之间的差距。

HTML5 采用此途径的好处在于 HTML5 规范所提供的即时且广泛的可用性。尽管移动 Web 站点可能影响深远,但是缺少用户想要的以及通常期望从本机应用程序中获得的本机观感。此外,HTML5 应用程序可能无法访问其目标平台某些特定的硬件功能,如网络摄像机或加速感应器。

HTML5 按平台计算的成本最低,因为您只需编写一次,即可在大多数浏览器上运行。然而,一些移动浏览器没有与时俱进地更新标准支持。这可能成为开发 HTML5 应用程序时的最大问题。如果本机功能对于您的项目很重要,则缺少此区域中的访问权限可能使您决定完全选择本机应用程序。

尽管 HTML5 拥有广泛的可用性,但请谨记,在某种程度上说,开发 Web 与开发本机应用程序类似。您的确需要考虑支持大量的浏览器。与设备开发一样,Web 开发人员的目标为拥有大部分用户的浏览器,例如 Internet Explorer、Chrome、FireFox 和 Opera。

您想要在不同设备的客户端上设计丰富的 UX,并且不能重复使用该特定的设备代码。以下本机功能不可能在多个平台中行为一致或可用:

  • 推送通知
  • 钱包
  • 近场通信 (NFC)
  • 多任务/多线程
  • 语音
  • 导航方案
  • 对话框

在混合或 HTML5 客户端应用程序中,切勿依赖于使用这些特定的本机属性。如果这类功能属于您的应用程序要求的一部分,则您需要选择完全本机方案。

架构师跨平台解决方案

确定您将支持哪些平台只是应用程序领域中的一个决定。此外,您还必须设计解决方案,并且考虑诸如以下的事宜:进入市场的时间,以及首先开发哪个平台等。如何在应用程序之间共享尽可能多的代码也是重要的考虑事项。

后端 Web 服务和 API 在跨平台方案中运行良好,因为每个平台都支持 HTTP。在后端使用服务层表示您只需要为这些服务编写一次代码。

就将体系结构扩展到关注客户端而言,您希望共享尽可能多的代码。您可以轻松地在含有可移植类库 (PCL) 的 Windows 8 和 Windows Phone 上编写代码,但这会忽略其他平台,如 Android 和 iOS。您可以使用 C# 编写和使用 Xamarin 工具交叉编译,从而在 Windows 8、Windows Phone、Android 和 iOS 之间共享代码。

选择本机的关键在于用户可以获得与本机平台相同的观感。尽管诸如 Xamarin 之类的工具让您可以在 UI 层共享某些代码,但是如果您单独制作每个 UI,则可以获得最佳的 UX 结果。这通常是指修改生成的 Xamarin 代码。此时是添加任何平台特定功能的好时机,以让每个平台上的用户都获得自定义的体验。

应用程序代码层映射到控制器或 Model-View-Controller (MVC) 的 ViewModel 部分或 Model-View-ViewModel (MVVM) 模式。UI 层映射到 MVC 和 MVVM 中的 View。当然,Model 是数据表示。这可能是映射到本地存储中的数据库对象的 JavaScript 类,或者可能映射到数据库中返回的远程方案。本地数据并不是您通常在设备之间共享的数据,因为它经常包括设备特定的信息。

创建解决方案最轻松快捷的方法是首先从创建后端层开始,然后创建 Web 站点,最后创建应用程序。按照此方法,您将不再局限于此,而是面向尽可能广泛的范围。从应用程序方面说,您将需要决定首先创建哪个应用程序以及是否有主要平台。

我自己倾向于 Windows 8/Windows RT/Windows Phone 平台,并且认为它们(尤其是 Windows Phone)拥有所有可用设备中最好的 UX。这不仅仅因为我工作于 Microsoft。我认为 iPhone 也具有良好的 UX。图块之类的功能和最好的 Nokia 照相机具有足够的理由让您的功能平台 (Windows Phone) 适用于应用程序中需要此类功能的任何用户。此外,在各种含有内置云基础的人员和日历应用程序的基于 Windows Phone 的设备上,Windows Phone 可以无缝地管理和合并您的联系人、日历和其他重要数据。

总结

随着工作场所中自带设备 (BYOD) 活动的出现,本机应用程序开发已变得日益普及。如您所见,创建可能影响您成功的应用程序时,有许多需要考虑的可变因素和事项。除非您工作的企业要求安装标准的桌面客户端,否则我不建议这样做。这不算该平台上的第一个应用程序。

如果您有充足的预算和人员,且拥有宽松的时间期限来创建解决方案,则可以创建移动版本的 Web 站点以及完整的本机应用程序集。这意味着您将提供所有可能的方法,以便访问您的服务和数据。当然,此方案工作量最大,成本也最高。

Rachel Appel 是一名顾问、作家、导师和前 Microsoft 员工,在 IT 行业有 20 多年的经验。她常在 Visual Studio Live!、DevConnections、MIX 等顶级行业大会上发言。她的专业是开发侧重于 Microsoft 系列开发技术和开放式 Web 并且符合业务和技术需要的解决方案。有关 Appel 的详细信息,请访问她的网站 rachelappel.com

衷心感谢以下技术专家对本文的审阅:Frank La Vigne (Microsoft) 和 Wally McClure (Scalable Development)