Architect's Log

I'm a Cloud Architect. I'm highly motivated to reduce toils with driving DevOps.

DBアクセス層の基底クラスを実装する

DBアクセス層の基底クラスのシグニチャのサンプルです。

基底クラス

public abstract class AbstractTypedGateway<TDataSet, TDataTable, TDataRow>
       : AbstractGateway
       where TDataSet : DataSet, new()
       where TDataTable : DataTable, new()
       where TDataRow : DataRow {
}

TDataSet、TDataTable、TDataRowは、デザイナで自動生成された型付きデータセットの型です。クラス内部ではその型を使ってロジックを記述します。

継承クラス

基底クラスを継承したHogeテーブルのクラスはこうなります。

public class HogeGateway
       : AbstractTypedGateway<
               FugaDataSet,
               FugaDataSet.HogeDataTable,
               FugaDataSet.HogeRow> {
}

これで型付きデータセットでテーブルのスキーマを抽象化することができます。