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

转载于:https://www.cnblogs.com/shihao/archive/2011/10/02/2198095.html

使用URI设计松散耦合的Metro应用程序相关推荐

  1. 【微服务架构】在微服务架构中最小化设计时间耦合

    理查森:我是克里斯·理查森.欢迎来到我关于在微服务架构中最小化设计时耦合的演讲.在这次演讲中,我将回答三个问题.什么是设计时耦合?这会造成什么问题?我们如何设计松散耦合的服务?这些年来我做了一些事情. ...

  2. 用于松散耦合的分布式系统的Chubby锁服务器

    文章目录 摘要 1. 简介 2. 设计 2.1 理由 2.2 系统架构 2.3 文件,目录和句柄 2.4 锁和序列生成器 2.5 事件 2.6 API 2.7 缓存 2.8 会话和KeepAlives ...

  3. REST API URI 设计的七准则

    在了解 REST API URI 设计的规则之前,让我们快速过一下我们将要讨论的一些术语. URI REST API 使用统一资源标识符(URI)来寻址资源.在今天的网站上,URI 设计范围从可以清楚 ...

  4. ML:MLOps系列讲解之《MLOps原则之监控/“机器学习成绩”系统/可再现性/松散耦合架构(模块化)/基于ML的软件交付指标/MLOps原则和实践的总结》解读

    ML:MLOps系列讲解之<MLOps原则之监控/"机器学习成绩"系统/可再现性/松散耦合架构(模块化)/基于ML的软件交付指标/MLOps原则和实践的总结>解读 目录

  5. ML:MLOps系列讲解之《MLOps原则—迭代增量过程/自动化/持续部署/版本控制/实验跟踪/测试/监控/“ML成绩”系统/可再现性/松散耦合架构(模块化)/基于ML的软件交付指标等》解读

    ML:MLOps系列讲解之<MLOps原则-迭代增量过程/自动化/持续部署/版本控制/实验跟踪/测试/监控/"ML成绩"系统/可再现性/松散耦合架构(模块化)/基于ML的软件 ...

  6. 后端:REST API URI 设计的七准则

             正文    在了解 REST API URI 设计的规则之前,让我们快速过一下我们将要讨论的一些术语. URI REST API 使用统一资源标识符(URI)来寻址资源.在今天的网站 ...

  7. IE8 松散耦合进程框架(Loosely-Coupled IE (LCIE)--特性介绍

    官方介绍:http://blogs.msdn.com/b/ie/archive/2008/03/11/ie8-and-loosely-coupled-ie-lcie.aspx 参考文档:http:// ...

  8. 实现类似IE的松散耦合(Loosely-Coupled )效果——Window Tabifier

    在IE8开始,就是用了一种称作松散耦合 IE (LCIE)的技术,基本原理就是使用不同的 iexplore.exe 进程实例来提供增强的独立性和可靠性.IE 的帧窗口和 tabs 运行在不同进程中,这 ...

  9. 理解SOA的松散耦合与紧密耦合

    SOA的一项关键特性就是使用松散耦合连接.传统上,应用程序与应用程序之间或者应用程序与服务之间的连接是紧耦合的,如用CORBA(公共对象请求代理体系结构)那样.此差异是很重要的. < XML S ...

最新文章

  1. 二分查找(循序渐进由0到1掌握二分)
  2. invalid table name什么意思_新手入门前端要学习什么?总结一些知识点(建议收藏)...
  3. python使用ORM之如何调用多对多关系
  4. 原生安全二倍速:探秘基础设施的内生“免疫系统“
  5. java打印九九乘法表——CSDN博客
  6. Halcon—Tuple中符号的含义
  7. FCPX插件mTransition Shade for mac(71组阴影遮挡过渡视频转场)
  8. elasticsearch的javaAPI之query
  9. android.support.v4.app.FragmentManager无法转换为android.app.FragmentManager
  10. 程序开发基础学习五(json配置、解析文件,c++篇)
  11. 3dmax无法显示缩略图 或者 缩略图显示为黑色 -解决方法
  12. android手机的根目录,安卓根目录详解
  13. Stellarium Windows/Linux编译记录
  14. 华为路由器接口如何区分_华为路由的线路输出的两种不同方法简介
  15. APP按下home键恢复到登录(主界面)
  16. 查看计算机内存过高,物理内存过高怎么办,小编教你电脑物理内存过高怎么办...
  17. scanf来代替gets
  18. C++ 内容基础知识
  19. JavaScript之for循环、while循环 continue、break与代码规范
  20. 下载谷歌play应用_在Google Play控制台上为应用设置发布并发布到内部曲目

热门文章

  1. Windows7下用VirtualBox安装Ubuntu网卡配置
  2. PIC32单片机harmony开发环境 - SPI例程和代码分析
  3. 开机自启动程序关闭方法_电脑非常卡,总有软件偷偷自启动?学会这1招,永久关闭它们!...
  4. 华三路由交换配置命令_华三路由器交换机配置命令
  5. c语言将字母的acsaii,C语言上机实验 答案
  6. 12bit灰度图像映射到8bit显示及python 实现
  7. 第一章:线性空间和线性变换
  8. Uncontrolled memory mapping in camera driver (CVE-2013-2595)
  9. elastic学习笔记
  10. 《Linux命令行与shell脚本编程大全 第3版》Shell脚本编程基础---23