BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

使用URI设计松散耦合的Metro应用程序

| 作者 Jonathan Allen 关注 594 他的粉丝 ,译者 高翌翔 关注 0 他的粉丝 发布于 2011年9月20日. 估计阅读时间: 6 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

Metro风格应用程序意味着小型且高度集中。对于我们传统上为企业建立的、大规模的、单一的应用程序而言,我们可把它们重新想象成工作流的特定工具。例如,你可能使用某款股票交易应用程序中的工具来查找并查看客户基本信息,而使用另一款应用程序来研究金融产品。无论来自这些模式中的任何一种,然后你就要跳到“购买股票”的工作流,此工作流可能位于一款完全不同的应用程序中。

在Metro中借助协议(protocols)的方式,你同样可完成这一切。对于我们上述的例子,此协议可能形如“acme-stock-purchase://client=123&stock=XYZ”。在安装时,该股票购买工具应被注册以便监听发送到“acme-stock-purchase”协议的消息。当发生此情况时,股票购买工具会被启动,并接收指定的参数。

用于处理这一切的代码相当容易编写,而且在基于C++、.NET、及JavaScript的应用程序中都是可用的。以下代码摘录展示了C++应用程序侦听OnActivated和OnFileActivated事件。当通过已注册的文件类型启动应用程序时会触发OnFileActivated事件。


void App::OnLaunched(Windows::ApplicationModel::Activation::LaunchActivatedEventArgs^ args)
  {
    Window::Current->Content = ref new MainPage(true);
    Window::Current->Activate();
  }

  void App::OnFileActivated(Windows::ApplicationModel::Activation::FileActivatedEventArgs^ args)
  {
    MainPage^ page = ref new MainPage(false);
    page->SelectScenario3(args->Files->GetAt(0)->Name);
    Window::Current->Content = page;
    Window::Current->Activate();
  }

  void App::OnActivated(Windows::ApplicationModel::Activation::IActivatedEventArgs^ args)
  {
    MainPage^ page = ref new MainPage(false);
    if (args->Kind == Windows::ApplicationModel::Activation::ActivationKind::Protocol)
    {
        Windows::ApplicationModel::Activation::ProtocolActivatedEventArgs^ protocolArgs = dynamic_cast<Windows::ApplicationModel::Activation::ProtocolActivatedEventArgs^>(args);
        page->SelectScenario4(protocolArgs->Uri->RawUri);
    }
    Window::Current->Content = page;
    Window::Current->Activate();
  }

此类通讯是单向的,源(source)应用程序无法知道目标(destination)应用程序将如何处理消息。尽管这限制了你的一些设计选择,但是它保持了各种工具之间的松散耦合。当你的公司业务需求发生变化时,可以更新单独的工具,而无需重新部署整个软件栈。

由于这些都是URI[1],因此它们不必由另一Metro应用程序来触发。任何有能力使用“http://sample.com”去启动web浏览器的应用程序都可以启动任何一款已启用协议(protocol-enabled)的Metro应用程序。同样,用户还可以将URI简单地粘贴到Run菜单中、或是任一资源管理器或IE浏览器的地址栏中。这使得开发者可将遗留程序、网络、以及Metro应用程序三者轻松地集成在一起。

译注

[1] URI,统一资源标识符,即Uniform Resource Identifier的缩写,是一个用于标识某一互联网资源名称的字符串。 该种标识允许用户对网络中(一般指万维网)的资源通过特定的协议进行交互操作。URI由包括确定语法和相关协议的方案所定义。详见统一资源标识符

查看英文原文:Designing Loosely Coupled Metro Applications with URIs

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

REST的小孙子 by 周 柏民

都REST风格架构

metro界面,感觉是另外一个android。 by Zh Forcy

这和android中的intent理念上是一样的。

Re: metro界面,感觉是另外一个android。 by 高 翌翔

Metro风格界面就是Touch-first browsing,即触摸优先的浏览体验。

Re: REST的小孙子 by 高 翌翔

恩,确实是REST风格架构的实现,

同样的思想、技术,不一样的实现、性能及用户体验,
小孙孙扳倒爷爷的事儿很常见,让我们拭目以待吧 :)

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

4 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT