メトロスタイルアプリケーションは、小さくて高度に収縮していることを意味する。伝統的な企業向けに作られたモノリシックな大規模なアプリケーションは、ワークフローに特化したツールであると再考することができる。たとえば、証券取引アプリケーションでは、ひとつのツールで基本的な顧客情報の位置と閲覧、そして証券商品の研究ができる。どちらのモードでも、完全に異なるアプリケーションであろう「証券の購入」ワークフローを超える必要がある。
メトロでこれを実現する方法がプロトコルの活用である。上の例で言えば、“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、メトロアプリケーションを統合することを可能にする。