Table Data Gateway(3)

Table Data Gateway

Example(C#)

  • 検索SQLごとにメソッドを作り、引数に検索したい値を渡し、検索結果をIDataReader型の戻り値で返す。IDataReaderはデータベースのカーソルライクなインターフェースで、一度にすべてを取り込むわけではないので、大量処理などには向いている。(ちなみに、IDataReaderはGetValues(Object[])メソッドを使って、列の値を全て取得し、Readメソッドで次の行にすすめるようなIF)
  • 更新などは引数に必要な値を渡して実行する

Example(ADO.net Data sets)

この部分は、コードを見て私が分析したことを中心に記述しています。

  • DataAdapterを使用し、検索・更新する。DataAdapterからの抽出結果はDataSetで受け、DataSetを書き換えた後に、これをDataAdapterに渡して保存する。本書では、これらをもつDataSetHolderを定義している。
  • DataGatewayは「全データ取得」「一部条件取得」などのメソッドを定義して、DataSetを取得できるようにする。DataSetはDataSetHolderを経由して取得する。DataAdapterはDataSetHolderが管理するため、DataGatewayからは見えない。
  • 個別のテーブルはDataGatewayを継承したクラスを作成し、具体的なテーブル名称をプロパティで定義するだけとする。このテーブル名称を保持する抽象プロパティを使用してDataGatewayを実装する。
  • 更新時は修正したDataSetをDataAdapterのUpdateメソッドを使用して書き換える。これらの処理はDataSetHolderに記述する。
  • DataSetは複数のテーブルから取得することができるため、DataAdapterはDataSetHolderにHashTableで管理し、適切なDataAdapterを使用できるようにする。これにより使用側はひとつのDataSetを取得・更新しているように見えるが、一方で、複数のテーブルから取得・更新できる。つまり、テーブルの実装を隠蔽することができる。