ドメイン層をシンプルに作るためのO-Rマッピング保守性・拡張性に優れたシステムを作る(10)(1/2 ページ)

» 2007年09月13日 12時00分 公開
[野村佳弘,日立ソフトウェアエンジニアリング]

前回「『データの永続性』に配慮した設計」までに、ドメイン層、パーシステンス層のパターンについて説明してきました。いろいろなパターンがありそれぞれ特徴があります。O-Rマッピングの役割を考えて、実現したいモデルに最適なパターンはどのように組み合わせればよいのでしょうか。今回は、O-Rマッピングの役割と、それを実現するためのドメイン層とパーシステンス層のパターンの組み合わせについて考えてみます。

インピーダンス・ミスマッチングとは?

 オブジェクト指向で設計を行った場合に一番難しいことは、ドメイン層とパーシステンス層の設計です。

 オブジェクト指向分析・設計では、上流工程で分析・設計したモデルの構造(概念モデル)において、継承やポリモーフィズムなどの抽象化を駆使し、できるだけ本質を見極めたシンプルなモデル構造を構築することにより、拡張性・保守性を実現します。そのため、ビジネスロジックの保守性・拡張性を考えた場合、概念モデルを崩すことなく忠実に実現できるのが理想的です。

 一方、データベースの設計では、一般的にリレーショナルデータベースが利用され、データモデリングで論理データベース構造を設計していきます。論理データベース構造は正規化・非正規化、導出項目の設定などデータをいかに整合性を取りながら効率的に利用するかを考える必要があります。

 しかしながら、リレーショナルデータベースでは、データを永続化できますが操作をデータにカプセル化して保持することはできません。また、継承やポリモーフィズムを実現することもできません。

 このような違いがあるため、概念モデル構造と論理データベース構造は異なる場合があり、これをインピーダンス・ミスマッチといいます(本来は、電気工学での用語です)。

ALT 図1 インピーダンス・ミスマッチ

ドメイン層とパーシステンス層の役割

 インピーダンス・ミスマッチは、ドメイン層とパーシステンス層の間で起こります。パーシステンス層はドメイン層のエンティティオブジェクト内のデータに、データベースのデータを提供するとともに同期を取る役割があります。

 インピーダンス・ミスマッチが存在する場合の、ドメイン層とパーシステンス層の役割について考えてみましょう。

 概念モデル構造はドメイン層に作り上げられていきます。ドメイン層を構成するクラスのオブジェクトは、データやビジネスロジックを持ち、継承やポリモーフィズム、またクラス間の関連などにより具体化しています。

  このようなドメイン層のクラスを基に、オブジェクトの構造を作り上げることが、ドメイン層とエンティティ層の役割です。

 ドメイン層では、例えば会員番号や商品番号などの情報を基に、サービスから要求されているビジネスロジックを実行するために必要なオブジェクトの構造を生成し、ビジネスロジックを実行します。

 エンティティ層は、ドメイン層のクラスにデータを提供します。このときできるだけドメイン層にはパーシステンス層を意識させないようにすることが理想的です。

ALT 図2 O-Rマッピングの役割 (クリックすると拡大

 ドメイン層とパーシステンス層には、背後に存在する役割としてインピーダンス・ミスマッチを解決するために、ドメインマネージャやパーシステンスマネージャが存在します。

 O-Rマッピングにおいては、生成したオブジェクトをプールする仕組みを利用することがあります。オブジェクトプールを利用することは、データベースとの同期を取る仕組みが難しいですが、オブジェクトの一意性を保ちながら、ドメインの構造と論理テーブル構造のマッピングを取るには有効な仕組みになります。

 サービス層は、必要なビジネスロジックを利用するためにドメイン層のドメインマネージャにエンティティオブジェクトの生成を依頼します(図2-1)。

 ドメインマネージャはエンティティクラスの構造を基にエンティティオブジェクトの構造を生成します(図2-2)。

  このときパーシステンスマネージャは、ドメインマネージャが必要とするオブジェクトをオブジェクトプールに存在するか確認し(図2-3)、存在しなければデータベースから関連するテーブルにアクセスし(図2-4)オブジェクトを生成します(図2-5)。そして、操作を実行します(図2-6)。また、オブジェクトを更新した場合には、オブジェクトプールと論理テーブルのデータの整合性を保つために同期を行います。

 このようなドメインマネージャとパーシステンスマネージャによりO-Rマッピングを実現します。そして、インピーダンス・ミスマッチが大きいほど難しい仕組みを実現しなければなりませんが、複雑な概念モデルをオブジェクト指向に基づいて、忠実に実装することが可能になります。

 それでは、前回までにお話ししたドメイン層とパーシステンス層のパターンでどのようにO-Rマッピングを実現していくのでしょうか。ここではそれぞれの層の組み合わせで考えていきます。

       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ