私が見ている一般的なパターンは、Mapper
パターンと呼ばれるDataMapper
ものです(混同しないでください)。これは、ある種の「生の」データソース(ADO.NET DataReader
やなどDataSet
)を引数として受け取り、フィールドをマップします。ビジネス/ドメインオブジェクトのプロパティ。例:
class PersonMapper
{
public Person Map(DataSet ds)
{
Person p = new Person();
p.FirstName = ds.Tables[0].Rows[0]["FirstName"].ToString();
// other properties...
return p;
}
}
アイデアは、Gateway / DAO / Repository / etcになります。返される前にマッパーを呼び出すので、基になるデータコンテナに対してリッチビジネスオブジェクトを取得します。
ただし、これは同一ではないにしても、ドメインオブジェクトを構築して返すFactoryパターン(とにかくDDDの用語)に関連しているようです。ウィキペディアによると、これは次のとおりです:DDDファクトリー:
ファクトリ:ドメインオブジェクトを作成するメソッドは、代替の実装を簡単に交換できるように、専用のファクトリオブジェクトに委任する必要があります。
その引用から私が考えることができる唯一の違いは、「マッパー」が特定のクラスにキー設定されている間に、必要に応じて特別なタイプのオブジェクトを返すことができるようにDDDスタイルのファクトリーをパラメーター化できることです(たとえば、BusinessCustomer対ResidentialCustomer)そして翻訳のみを行います。
それで、これらの2つのパターンに違いはありますか、それとも異なる名前で本質的に同じものですか?
DataMapper
パターンがデータベース自体にアクセスしたと思ったが、この「マッパー」はデータベースからプルせず、何らかの結果セットをオブジェクトに変換するだけです。