写点什么

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

  • 2011-09-19
  • 本文字数:1366 字

    阅读完需:约 4 分钟

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

2011-09-19 03:432582
用户头像

发布了 55 篇内容, 共 20.5 次阅读, 收获喜欢 1 次。

关注

评论

发布
暂无评论
发现更多内容

项目管理系列(8)-从0到1搭建PMO(一)

Ian哥

28天写作

Soul 源码阅读 03|WebSocket 同步数据分析

哼干嘛

Java 源码分析 Soul网关

十个手指头弹钢琴、高水准欣赏探讨优雅益智的古典音乐技术 数学不好很难进行

【高并发】ReadWriteLock怎么和缓存扯上关系了?!

冰河

并发编程 读写锁 高并发 ReadWriteLock 签约计划第二季

5G最核心的本质是能力可被编排及开放

JiangX

5G 数字化转型 28天写作

你有多久没去看海了呢「幻想短篇 15/28」

道伟

28天写作

疫情闭关修炼半个月,我竟把JDK源码都读懂了!

996小迁

Java 编程 架构 面试 程序人生

28天瞎写的第二百二十六天:TechCrunch Hackathon 的故事

树上

28天写作

一个系统小BUG修复投产居然花了3个小时来处理(上)

罗小龙

28天写作 投产事故 解决思路

无代码、Excel与Airtable

lidaobing

低代码 Excel 无代码开发 28天写作 Airtable

如何管理过程质量?新手管理者的陷阱

一笑

管理 管理者 28天写作 质量保证

什么是上瘾?

石云升

28天写作 上瘾

人设崩塌的美国生物实验室

脑极体

共识算法的简单理解(一)

石君

28天写作

soul 数据同步(三)http长轮询 同步策略

xzy

历史上的今天

IT蜗壳-Tango

七日更

为什么很多事情说起来容易做起来难

Justin

学习 心理学 成长 心态 28天写作

【CSS】红砖背景

德育处主任

css3 大前端 html/css CSS小技巧 28天写作

区块链数字货币交易所系统开发|区块链数字货币交易所软件APP开发

系统开发

week9-homework

J

week9-conclusion

J

用docker-compose快速部署ChirpStack

远鹏

Docker-compose IoT ChirpStack LoraWan Go 语言

关于“为更新而更新”的一种新的理解

Nydia

币币交易系统APP开发|币币交易软件开发

系统开发

区块链量化交易怎么做?

v16629866266

2050年的一次出游 (28天写作 Day15/28)

mtfelix

自动驾驶 28天写作 科幻写作

产品质量管理活动流程

L3C老司机

Windows AD 是否开启或者关闭了UAC服务

BigYoung

windows Windows 10

【并发编程的艺术】JVM内存模型

程序员架构进阶

架构 Java内存模型 Java虚拟机 28天写作

技术招聘常被吐槽,企业应该考虑好这一点

李忠良

28天写作

大数据知识专栏 - Hadoop的资源管理 Yarn介绍

小马哥

大数据 hadoop YARN 七日更

使用URI设计松散耦合的Metro应用程序_.NET_Jonathan Allen_InfoQ精选文章