PoEAA は 10 章の Data Source Architectual Patterns に突入しました。 その一つ目は、Table Data Gateway です。
Table Data Gateway は、1 つのテーブルあるいは View に対して発行される select/insert/update/delete といった SQL を保持して当該のテーブル/View へのアクセスを抽象化するパターンです。これにより、データアクセスをビジネスロジックから排除することができます。このパターンを使用しているアーキテクチャはよくみますね。
これといって特筆すべきこともなさそうなんですが、まず Table Data Gateway は基本的にはステートを持ちません。ドメイン層から渡されるのが抽出条件だったりで、Table Data Gateway はそれを元に SQL を構築して DB に発行し、DB から返却された値をドメイン層に返すっていう実装にしかならないので、まぁステートレスにはなります。 あとは返却する値についてはいくつかパターンがありまして、
- wikipedia:Data Transfer Object (DTO) を返す
- Record Set を返す
- Domain Object を返す
このパターンだと、ぼくは 1. の DTO を返却するのが好きで、単純に POJO を返す方がテストが楽じゃん、というのが根底にあります。 ただ、採用する言語系によっては .NET などのように標準的に Record Set を返却するケースもあるらしいです。