メトロスタイルアプリケーションは、小さくて高度に収縮していることを意味する。伝統的な企業向けに作られたモノリシックな大規模なアプリケーションは、ワークフローに特化したツールであると再考することができる。たとえば、証券取引アプリケーションでは、ひとつのツールで基本的な顧客情報の位置と閲覧、そして証券商品の研究ができる。どちらのモードでも、完全に異なるアプリケーションであろう「証券の購入」ワークフローを超える必要がある。
メトロでこれを実現する方法がプロトコルの活用である。上の例で言えば、“acme-stock-purchase://client=123&stock=XYZ”のようなプロトコルである。証券購入ツールのインストール時に“acme-stock-purchase”プロトコルで送られたメッセージを受信できるように登録することができる。指定されたパラメータを受信すると、ツールが起動される。
コードはC++、.NET、JavaScriptベースのアプリケーションで非常にかんたんに処理することができる。OnActivatedとOnFileActivatedapplicationイベントを処理するC++アプリケーションから抜粋したコードを以下に提示する。後者は、登録されたファイルの種類を経由してアプリケーションを起動したときに使用する。
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();
}
このコミュニケーションは一方通行で、元のアプリケーションがメッセージをどのように処理されるかを知る方法がない。これはデザインの選択のいくつかを制限するが、疎結合の様々なツールを維持することができる。あなたの会社のビジネスニーズが変わったとき、全体を再デプロイすることなく、単体ツールを更新することができる。
URIについては、他のメトロアプリケーションから起動される必要はない。“http://sample.com”を使ってWebブラウザを起動することができるあらゆるアプリケーションは、プロトコルが有効なメトロアプリケーションを起動することができる。 同じように、ユーザーは単純にURIを起動メニューやWindows ExplorerやInternet Explorerのアドレスフィールドに貼り付けるだけである。これにより、開発者が簡単にレガシー、Web、メトロアプリケーションを統合することを可能にする。