รูปแบบทั่วไปที่ฉันเห็นคือสิ่งที่เรียกว่า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;
}
}
แนวคิดเป็นเกตเวย์ / DAO / Repository / ฯลฯ ของคุณ จะโทรเข้าไปใน Mapper ก่อนที่จะส่งคืนดังนั้นคุณจะได้รับวัตถุทางธุรกิจที่หลากหลายเมื่อเทียบกับที่เก็บข้อมูลพื้นฐาน
อย่างไรก็ตามดูเหมือนว่าจะเกี่ยวข้องกันหากไม่เหมือนกันกับแพทเทิร์น Factory (ใน DDL parlance, anyways) ซึ่งสร้างและส่งคืนวัตถุโดเมน Wikipedia บอกว่าเรื่องนี้: โรงงาน DDD:
โรงงาน:วิธีการในการสร้างวัตถุโดเมนควรมอบให้กับวัตถุเฉพาะของโรงงานเพื่อให้การใช้งานทางเลือกอาจเปลี่ยนได้อย่างง่ายดาย
จากที่อ้างถึงความแตกต่างเพียงอย่างเดียวที่ฉันคิดได้ก็คือโรงงานสไตล์ DDD สามารถกำหนดพารามิเตอร์ได้ดังนั้นจึงสามารถส่งคืนวัตถุชนิดพิเศษได้หากความต้องการเกิดขึ้น (เช่น BusinessCustomer กับ ResidentialCustomer) ในขณะที่ "Mapper" เป็นคีย์เฉพาะชั้น และเพียงไม่แปล
ดังนั้นจะมีความแตกต่างระหว่างสองรูปแบบเหล่านี้หรือพวกเขาเป็นสิ่งเดียวกันกับชื่อที่แตกต่างกัน?
DataMapper
รูปแบบนั้นเข้าถึงฐานข้อมูลของตัวเองได้ในขณะที่ "Mapper" นี้ไม่ได้ดึงมาจากฐานข้อมูลเพียงแปลงชุดผลลัพธ์บางชนิดเป็นวัตถุ