PoEAA ch13 Metadata Mapping
Metadata Mapping
Holds details of object-relational maping in metadata.
- O/Rマッピングのコードのほとんどは、フィールドの対応づけ
- DBのテーブルのフィールド
- メモリ上のオブジェクトのフィールド
- 退屈な繰り返しコードになる
- 本パターンでは、フィールドの対応表を定義して汎用コードで処理を実行する
- read
- insert
- update
How It Works
コード生成 | リフレクション | |
---|---|---|
柔軟性 | 劣る | 優れる |
マッピング定義 | コンパイル前 | 実行時 |
実行時速度 | 速い | 遅い |
デバッグ | 厄介 | 厄介 |
- リフレクションでは、実行中にDBマッピング定義を更新することができる
- リフレクションの実行時速度は遅い
- が、SQLのリモートコールに比較すれば大したことはない
- 測定せよ
- デバッグのしやすさについては、開発者の慣れにもよる
- コード生成は、生成後のコードにブレークポイントを張れる
- マッピング定義メタデータの置き場所?
- メタデータの置き場所が実行時パフォーマンスに与える影響は大抵無視できる
- メタデータの仕様をどれだけ作り込むか
When to Use It
- DBマッピングの労の多くを省ける
- が、弱点も
- 市販のO/Rマッパーも内部でMetadata Mappingを行っていたりする
- 自前で作る場合はトレードオフを勘案せよ
- DBマッピングコードを手書きする場合との比較
- リフレクション方式の場合、パフォーマンスを実測する
- DBマッピングコードを手書きする場合との比較
- Metadata Mappingの前段として、Layer Supertypeで処理を共通化せよ
- 【補】Template Method Pattern
- Metadata Mappingとリファクタリング
コード例
- 略