PoEAA ch10 Row Data Gateway
- Row Data Gateway
- How It Works
- When to Use It
- Example: A Person Record (Java)
- Example: A Data Holder For a Domain Object (Java)
- 英語
Row Data Gateway
An object that acts as a Gateway to a single record in a data source.
There is one instance per row.
- 【補】LaravelのEloquentはこれかしらね
- メモリ上のオブジェクトにDBアクセスコードを埋め込むことの短所
- Row Data Gateway
- 行レコードと同じ構造のオブジェクト
- 普段遣いの言語の通常の機構でDBアクセスを隠蔽
- メソッド生えてる
- insert
- update
- delete
- findは生えてない(後述)
- メソッド生えてる
How It Works
- 単一のレコードを模すオブジェクト
- 実表の1行とか
- 1フィールド1カラム
- SQLの型と、メモリ上のオブジェクトの型との間で型変換
- 単純なもの
- Transaction Scriptから呼び出すと良い感じ
- どうやってレコードfindしてくるの?
- Active Recordとどう違うの?
- 実表以外を隠蔽してもいい
- ビュー
- クエリ
- 更新の競合について
- 巻き戻り
- 同一行に対するインスタンスを複数作る
- それぞれでupdate()する
- 先にupdate()した更新内容が後のupdate()で上書きされてしまう
- updatableなビューでも同様のこと起きる
- 【補】実表を更新したあと、ビューを更新してしまう or 逆
- どうすんの
- 一般的な防止策はない
- update()を生やさないという選択も
- 巻き戻り
- 実装が冗長
- 【補】複数のテーブルについて、ほぼほぼ同じような実装
- Metadata Mappingして自動生成しようぜ
When to Use It
- そもそもGatewayを使うか
- Gatewayを使う場合、Row Data GatewayとTable Data Gatewayとどっち使うのか
- ドメイン層とのかねあい
- Row Data GatewayとDBの構造とを揃えるか独立させるか
- Data MapperとRow Data Gatewayとの併用
Example: A Person Record (Java)
- 略
Example: A Data Holder For a Domain Object (Java)
英語
- crux
- 核心