写点什么

使用 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:432733
用户头像

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

关注

评论

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

多源异构数据源融合怎么做?Join操作篇(2)

谷云科技RestCloud

数据分析 join ETL 多源异构数据融合

双十一轻松实现云上高效沟通!华为云Flexus云会议实测体验领先

轶天下事

《Django 5 By Example》阅读笔记:p54-p75

codists

Python django

一图看懂云消息队列 RabbitMQ 版对比开源优势

阿里巴巴云原生

阿里云 云原生

澳鹏白皮书:2024年AI全景报告

澳鹏Appen

人工智能 行业报告

应用网关的演进历程和分类

阿里巴巴云原生

阿里云 云原生 网关

权限系统:6个权限概念模型设计

不在线第一只蜗牛

数据库 大数据 运维

七招提升工作效率

俞凡

生产力

极速启动,函数计算弹性降本能力再升级

阿里巴巴云原生

阿里云 云原生 函数计算

一文读懂Pencils Protocol的Auction产品,以及其背后的价值支撑

加密眼界

如何快速制作精美ppt图表?详细的保姆级教程来了!

职场工具箱

效率工具 职场 PPT 可视化分析 AI生成PPT

百度发布 AI 眼镜:全球首搭中文大模型,支持边走边问;OpenAI 联合创始人宣布回归,主抓重大技术创新丨 RTE 开发者日报

声网

优化数据管理,提升监测效率:TDengine与新疆地环院达成合作

TDengine

tdengine 时序数据库 数据库·

一文读懂Pencils Protocol的Auction产品,以及其背后的价值支撑

股市老人

鸿蒙NEXT开发案例:光强仪

zhongcx

30 秒!用通义灵码画 SpaceX 星链发射流程图

阿里云云效

阿里云 云原生

双十一企业协作效率再升级!华为云Flexus版云会议299元_年起

轶天下事

革新农业未来!Dimitra生态币价双双腾飞在即

股市老人

用 Zap 轻松搞定 Go 语言中的结构化日志

左诗右码

云速搭助力用友 BIP 平台快速接入阿里云产品

阿里巴巴云原生

阿里云 云原生 BIP

30 秒!用通义灵码画 SpaceX 星链发射流程图

阿里巴巴云原生

阿里云 云原生

双十一低成本上车!详谈华为云Flexus云会议为我们中小企业带来了什么

轶天下事

双十一入手华为云Flexus云会议后,我总结了中小企业无法拒绝的3大优势

轶天下事

为中小企业量身定制的云会议!华为云Flexus版云会议亮相828

轶天下事

八招解决 Golang 性能问题

俞凡

golang

离散元仿真技术与AI融合,助力广泛行业实现创新突破

Altair RapidMiner

AI 仿真 DEM altair 离散元

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