編集者のメモ

アーキテクチャと集約

Howard Dierking

fig01.gif

記事のラインアップからおわかりのように、今月はソフトウェア アーキテクチャに関連する問題が中心テーマです。この場を借りて、最近ときどき考えさせられる "集約" の問題について一言申し上げたいと思います。

私と会って歓談をしたことがある人々 (または私と縁故のある人々) は、私について少なくとも 2 つのことを証言できます。その 1 つは、ソフトウェア開発 (特にアーキテクチャ) の話になると必ず熱心に語り出すということです。もう 1 つは、語っているうちに興奮してきて、だんだん大声で早口になるということです (親友の Glenn Block などが話に加わると、この傾向がいっそう激しくなります)。集約は、アーキテクチャに関するトピックの中でも特に私の関心の高いテーマなので、どうかスピーカーの音量を下げておいてください。

集約とは、ドメイン駆動設計 (DDD) の開発でよく使われる用語であり、その定義は、"データの変更時に 1 単位として扱われる関連するオブジェクトのクラスタ。外部参照はルートとして指定された AGGREGATE の 1 つのメンバに制限される。AGGREGATE の境界内で一連の整合性規則が適用される" となっています。

モデルをこのように分解して考える方法の支持者は私だけではないでしょうが、私の場合は、それにとどまらず、確固とした集約境界の作成に失敗すると、スパゲッティのようなアプリケーション設計を生み出す大きな原因になるとさえ考えています。このような設計は、リレーショナル データベース スキーマにがんじがらめに結合され、複雑に入り組んでいるために、進化が困難で、クラウド コンピューティングのアーキテクチャに取り入れられるようなメッセージ ベースのパラダイムをサポートできません。

ただし、集約境界を定義するプロセスには、必ずしも最適な方法を採用しなくてもかまわないと考えています。問題の根本原因は、データベースを先に設計するか、オブジェクト モデルを先に設計するかに関係なく、どちらの場合にも詳細な論理エンティティ構造になるため、このような方法で抽象化を考えると簡素化の機会が見過ごされる可能性があるという点にあります。

たとえば、私は Microsoft Word のアドインを使用して記事のメタデータを手書き原稿に関連付け、このメタデータを SharePoint で管理しています。これは、データベース用語で表現すれば、キンボール式データ ウェアハウスのスター型トポロジに近い環境です。

アプリケーションの設計は、ドメイン モデルの作成から始めました。当初の構想では、記事の一覧を参照し、手書き原稿に関連付ける記事をその一覧から選択する機能をサポートすることを考えていました。膨大な記事の一覧にユーザーがうんざりしないように、Magazine (雑誌) に Issues (号) が含まれ、その中に Articles (記事) が含まれる自然階層を使用して、この操作を行う機能を追加しました。何の変哲もないありふれた機能です。

では、何が問題なのでしょうか。このモデルは、これまでに数知れずお目にかかってきた一般的なモデルに似ていますが、集約境界を定義するうえで問題に突き当たるタイプのモデルでもあります。その理由は、動作ではなく構造に基づいているからです。私の構想を再現するため、ユーザーが自然階層に従って一連の記事に移動できるようにしたいと思います。このロジックでは、階層は単に一連の記事の投影であり、私のモデルは、上図のように、私が明確に定義した記事の集約を持つように変更されます。

従来の階層をオブジェクト モデルに使用してはならないということではありません。集約を定義するためにモデル内のクラスのグループで境界線を引くのではなく、まず動作に基づいて大雑把に集約を定義し、クラスを集約定義内に配置するべきだということです。正しい集約定義を求めて分析不能に陥ることなく、正しい一歩を踏み出して、構造より動作に基づいたシステムを構築してください。

msdn.microsoft.com/magazine をご覧ください。MSDN Magazine に関するご質問、ご意見、ご提案は、編集者までお送りください (mmeditor@microsoft.com)。

**今月号の記事の執筆に携わったマイクロソフトの技術部門の次の専門家に感謝します。**Jean-Paul Boodhoo、Pablo Castro、Ben Constable、Jeff Derstadt、Chuck Esterbrook、Eric Fabricant、Steve Freeman、Ashok Kamath、Bertrand LeRoy、Nat Pryce、Ashish Shetty、Don Smith、Chris Tavares、Kevin Hoffman、Dave Fugate、Harry Pierson、Curt Hagenlocher、Lynn Langit、Varsha Mahadevan、Stephen Toub、Mark Lawrence、および Henri Socha。