zoukankan      html  css  js  c++  java
  • 使用URI设计松散耦合的Metro应用程序

    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由包括确定语法和相关协议的方案所定义。详见统一资源标识符

  • 相关阅读:
    面经补充
    一些杂项
    leetcode整理
    缓存问题及相关解决策略
    4.10 面经补充
    合并区间(二维数组与列表的转换)
    1.4任务
    jvm虚拟机笔记<八> 线程安全与锁优化
    jvm虚拟机笔记<七> 内存模型与线程
    jvm虚拟机笔记<六> 运行期优化
  • 原文地址:https://www.cnblogs.com/shihao/p/2198095.html
Copyright © 2011-2022 走看看