データ指向かオブジェクト指向か

.NETは、データ指向でもオブジェクト指向でもシステムを構築しやすいテクノロジーだと思う。反面、構築前にどちらの方式を採用するか決定する必要がある。規模や複雑度にもよるが、筆者は一般的な受発注や在庫管理程度の業務システムであれば、データ指向つまりデータセットを使って構築し、非常に複雑な制御系システムや生産管理システムならオブジェクト指向で構築すべきだと考える。

データ指向とは、データモデルをシステム内のデータのやり取りに使うシステムの方式である。データモデルとは、データベースのテーブルと同様の構造を持ったデータである。マイクロソフトの基盤技術であるレコードセットや、今のデータセットをイメージしていただければよい。

    メリット
  1. 単純で作りやすい

  2. データベースのテーブルカラムとほぼ同じ属性をもつクラスを作るため簡単である。
  3. .NETの場合は開発生産性が良い

  4. DataSetのデザインがGUIで行える。(クラスの属性をコーディングする必要がない) DataGridViewなどのコントロールとDataSetの親和性が高いため、画面にデータを簡単に表示できる。

    デメリット

  1. データ操作が散在する

  2. データモデルはメソッド(振る舞い)を定義できないので、データを操作するロジックがシステムの各層に散在する。たとえば、データを検証するロジック)。これは、拡張性や保守性を下げることになる。

  3. 大規模で複雑なデータモデルの開発は困難

  4. システムの規模が大きくなり、ビジネスが複雑になってくると、データセットに対する操作が多くなりプログラムが煩雑になる。データ操作は散在しているため、仕様変更に対してどこを修正すればよいかを把握することも難しく、修正箇所とテスト量も多くなる。また、テーブル数が多くなるにしたがって、検索結果を取得するSQLも複雑になる。

  5. オブジェクト指向特有のテクニックが使えない

  6. DataSetもクラスであるが、メソッドを開発者が追加できないため、オブジェクト指向特有のテクニック---継承、ポリモフィズム、デザインパターン---をDataSetに対して使うことはできない。

オブジェクト指向は、ドメインモデルをシステム内のデータのやり取りに使うシステム方式である。ドメインモデルとは、現実世界に登場するモノ、コトを分析して作る概念の構造である。現実世界でそのモノが動作しコトが起こることモデル化して、それをソフトウェアの世界で実行し、システムを動作させる方式である。このモデルを元に作ったクラスをエンティティクラスとよぶ。(マイクロソフトはカスタムクラスとよぶ。)

    メリット

  1. データ操作が局所化される

  2. エンティティクラスの中にデータとそのデータ操作がセットで記述されているため、データの項目が増えたり構造が変わってとしても、その変更はエンティティクラス内部の修正となり、エンティティクラスを利用している各層のソースコードへの影響が少ない。

  3. 仕様の変化に対応しやすい

  4. 現実世界の振る舞いや情報が変われば、それに対応するクラスの属性やメソッドを変更すればよいので、仕様変化に耐えるシステムにできる。

  5. 複雑なシステムも扱える

  6. システムが複雑になればそれ相応にコストも必要になるが、現実世界で増えたり変更された部分のみ拡張・変更すればよく、拡張・変更する範囲が限定的になる。

    デメリット

  1. 設計にコストが掛かる

  2. ドメインモデルを作成するには、問題領域に登場する概念やものを抽象化し、モデル化するという作業がデータベースのテーブルを定義するよりもはるかに時間が掛かる。また、データ指向よりも、作成するクラス数も多くなるので時間が掛かる。

  3. インピーダンスミスマッチの問題

  4. インピーダンスミスマッチとは、ドメインモデルの構造とデータベースのスキーマ構造の違い(アンマッチ)の問題である。ドメインモデルは、現実世界で扱う概念をモデル化しているが、データベースのスキーマは正規化を繰り返し、登録更新処理に最適な構造になっている。このため、ドメインモデルのデータをリレーショナルデータベース(RDB)に保存するには、マッチングのためのコード生成が必要である。この非クリエイティブな仕事に非常に工数が掛かかる。

データ指向もオブジェクト指向も一長一短であるが、最初に述べたように.NETはどちらかの選択が可能である。システムの規模や複雑さ、将来の拡張・仕様変更の見通しなどを考慮して決定すべきだと考える。.NETであれば、データセットやデータセットと親和性の高いコントロールが用意されており、開発ツールのサポートもよくできている。したがって、一般的な業務システムのシンプルなものであればデータ指向のほうが適していると考える。

トラックバック

トラックバックURL:
http://www.apricot-jp.com/cgi/mt/mt-tb.cgi/256

関連情報

Copyright(C) 2007 アーキテクト360 Allrights reserved.