写点什么

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

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

关注

评论

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

在stable diffussion中控制生成图片的光线

程序那些事

程序那些事 Stable Diffusion

苹果电脑效率工具:Magnet pro for mac窗口分屏管理工具

Rose

火山引擎VeDI赋能小城酒店业,助力“流量”向“留量”转化

字节跳动数据平台

大数据 数据分析 云服务 火山引擎 增长营销

GitHub 上 Stars 数量最多的 8 个开源 CRUD 项目

NocoBase

GitHub 开源 低代码 crud 无代码

Metadata Converter for Mac(照片元数据编辑查看器)v1.6免激活版

Rose

海外远程控制如何选择方案?贝锐向日葵跨境远控的几大优势

科技热闻

腾讯云发布AI infra品牌“腾讯云智算”

ToB行业头条

【Tomcat源码分析 】"深入探索:Tomcat 类加载机制揭秘"

派大星

tomcat源码解读

Bettertouchtool for Mac 功能强大的触摸板辅助工具

Rose

别让质量问题拖垮您的企业!快看看这些隐藏的风险!

天津汇柏科技有限公司

质量管理 低代码 AI人工智能

公开课 | 测试工程师的质量体系构建指南

测试人

软件测试

EMQX Enterprise 5.8.0 发布:实现跨区域、全球分布的集群连接

EMQ映云科技

emqx

观测云产品更新 | 日志、场景、异常追踪、监控、Pipeline等

观测云

监控 日志

非凸科技2025届秋季校园招聘正式启动

非凸科技

校园招聘 秋招

京东商品详情数据接口的应用场景与技术实现

tbapi

京东商品详情数据接口 京东商品数据接口 京东API 京东数据采集接口 京东商品数据采集接口

测试工程师的质量体系构建指南

霍格沃兹测试开发学社

一个故事理解消息队列-下

老张

kafka 中间件 消息队列 基础架构

易于使用的图形化 PostgreSQL 数据库开发工具:Navicat for PostgreSQL

Rose

键盘也能用上大模型?文心一言内置于罗技最新品

百度Geek说

大模型 开发语音 文心一言

淘宝Taobao API接口调用指南

联讯数据

天猫商品评论API返回值中的虚假评价与识别

技术冰糖葫芦

api 网关 API Explorer API 策略 pinduoduo API

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