Pola umum yang saya lihat adalah apa yang dikenal sebagai Mapper
pola (tidak menjadi bingung dengan DataMapper
yang merupakan sesuatu yang sama sekali berbeda), yang mengambil sebagai argumen semacam sumber data "mentah" (misalnya ADO.NET DataReader
atau DataSet
) dan memetakan bidang ke properti pada objek bisnis / domain. Contoh:
class PersonMapper
{
public Person Map(DataSet ds)
{
Person p = new Person();
p.FirstName = ds.Tables[0].Rows[0]["FirstName"].ToString();
// other properties...
return p;
}
}
Idenya adalah Gateway / DAO / Repository / etc Anda. akan memanggil ke Mapper sebelum kembali, sehingga Anda mendapatkan objek bisnis yang kaya versus wadah data yang mendasarinya.
Namun, ini tampaknya terkait, jika tidak identik, dengan pola Pabrik (dalam bahasa DDD, anyways), yang membangun dan mengembalikan objek domain. Wikipedia mengatakan ini: Pabrik DDD:
Pabrik: metode untuk membuat objek domain harus didelegasikan ke objek Factory khusus sehingga implementasi alternatif dapat dengan mudah dipertukarkan.
Dari kutipan itu, satu-satunya perbedaan yang dapat saya pikirkan adalah Pabrik DDD-style dapat diparameterisasi sehingga dapat mengembalikan jenis objek khusus jika diperlukan (misalnya BusinessCustomer versus ResidentialCustomer) sementara "Mapper" dikunci ke kelas tertentu dan hanya terjemahan.
Jadi apakah ada perbedaan antara kedua pola ini atau apakah keduanya pada dasarnya sama dengan nama yang berbeda?
DataMapper
pola melakukan akses database itu sendiri, sementara "Mapper" ini tidak menarik dari database, hanya mengubah set hasil semacam menjadi objek.