PoEAA ch10 Table Data Gateway
- Table Data Gateway
- How It Works
- When To Use It
- Further Reading
- Example: Person Gateway (C#)
- Example: Using ADO.NET Data Sets (C#)
Table Data Gateway
An object that acts as a Gateway to a database table.
One instance handles all the rows in the table.
- 【補】LaravelのDatabaseManager(DBファサードの実体)は、全テーブルを対象とするTable Data Gatewayといえそう
- アプリケーションのロジックとSQLを混ぜるとよくない
- アプリケーション開発者の多くはSQLに不慣れ・上手ではない
- DB管理者がチューニングしやすくするためにも分離すべき
- Table Data Gateway
- 一つの表もしくはビューに対するSQLを一元管理する
- SELECT
- INSERT
- UPDATE
- DELETE
- 他のコードはこいつ経由でDBアクセスする
- 一つの表もしくはビューに対するSQLを一元管理する
How It Works
- シンプルなインタフェースをもたせる
- 戻り値どうする
- たいていは1テーブル1Table Data Gateway
- 非常にシンプルなケースでは全テーブル1Table Data Gateway可
- Table Data Gatewayで隠蔽するのは実表に限らない
- ビュー
- ビューにはしていないクエリ
- ビューに対してTable Data Gatewayを作り、ビューの元となる実表へのUPDATEをupdateメソッドとして隠蔽するのはよいテクニック
When To Use It
- そもそもGatewayを使うのか
- Gatewayを使う場合、Table Data GatewayとRow Data Gatewayとどちらを使うのか
- ドメイン層とのかねあい
- Domain Modelと併用することはまずない
- Data Mapper使え
- Table Moduleとの親和性よい
- Table Module採用時は、データソース層はこれ一択
- Transaction Scriptとよく合う
- Row Data Gatewayもそう
- Domain Modelと併用することはまずない
- Row Data Gatewayとのちがい
- Data MappersとTable Data Gatewayの併用
- SQLとストアドプロシージャとを同一のインタフェースに隠蔽できる
- 実表の構造を隠蔽
Further Reading
- DAO: Data Accessor Pattern
- DAOという名前を使わなかった理由
Example: Person Gateway (C#)
- 略
Example: Using ADO.NET Data Sets (C#)
- コード略(pp.148-151)
- Data Set: 表指向データの保持。ステートフル
- Data Adapter: 実際にDBアクセスするクラス。ステートレス
- Data Set Holder: Data SetとData Adapterとを集約するやつ
- Data Gateway: Data Set Holderに処理を委譲する