理系学生日記

おまえはいつまで学生気分なのか

オブジェクト指向の世界においては、小さなオブジェクトが、いわゆるメッセージングパッシングを通して一つの処理を行う世界が構築されます。しかし、このメッセージングパッシングがネットワークを介して多数行われるとなると、その蓄積はいつしかパフォーマンスに影響を与える規模のものになります。 だからといって巨大オブジェクトを構築すると拡張性が落ちる。このジレンマを軽減するパターンが、Remote Facade です。

Remote facade は何のドメインロジックも持たず、単に「粗い」粒度のメソッドコールを受けて、それを個々のオブジェクトへの細かなメソッドコールに変換する wikipedia:Facade パターン です。

上記の例では、Remote Facade である AddressFacade はクライアントに対して getAddressData を提供し、このメソッドコールを getStreet()getCity()getZip() という一連の細かなメソッドコールに変換します。クライアントは、ネットワーク越しに細かなメソッドコールを行うことなしに、一連の住所データを取得できるということになります。

RemoteFacade は、クライアントとの接点になることから、様々な他の機能を持つこともあります。

  • アクセスコントロール
  • トランザクション制御

などなど。

ただ、RemoteFacade は、単にネットワーク間やプロセス間通信の負荷を低減させるのが目的であることがミソで、そのために RemoteFacade の実装は非常に薄いものになります。実際の処理はドメイン層に移譲されます。