データマッパー
原文: https://www.martinfowler.com/eaaCatalog/dataMapper.html
Mapper (473) レイヤは、オブジェクトとデータベース間でデータを移動させる。データは、オブジェクト、データベース、およびMapperから独立させる。
解説の全文は『PofEAA』 165 ページを参照。
オブジェクトとリレーショナルデータベースは、 異なるメカニズムでデータを構成している。 オブジェクトの多くの部分(コレクションや継承など)は、 リレーショナルデータベースでは表すことができない。 多くのビジネスロジックを伴ったオブジェクトモデルを構築する場合、 データおよびデータに付随する振る舞いをうまくまとめるために、 このメカニズムを使うことは非常に大切である。 これによりスキーマが異なったままとなる。 つまり、オブジェクトスキーマとリレーショナルスキーマはマッチしないのである。
他にも、2つのスキーマ間でデータを転送しなければならない。 このデータ転送は、それ自体が複雑な代物である。 メモリ内のオブジェクトがリレーショナルデータベース構造を知っている場合、 どこかひとつを変更すると、他のところにも波及してしまう。
DataMapperは、メモリ内のオブジェクトをデータベースから分離するためのソフトウェアレイヤである。 その責任は両者間でデータを受け渡しすること、そして、両者を分離することである。 DataMapperを使うと、メモリ内のオブジェクトはどこにデータベースがあるのかすら知る必要がない。SQLインターフェースコードも必要なく、データベーススキーマも知らないだろう。(データベーススキーマは、自分を使用しているオブジェクトのことを常に知らない。) マッパー(473)の一種であるため、DataMapperはドメインレイヤのことを知らない。