एक सामान्य पैटर्न जो मैं देख रहा हूं वह यह है कि 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;
}
}
आपके गेटवे / डीएओ / रिपॉजिटरी / आदि का विचार। लौटने से पहले मैपर में कॉल करेंगे, ताकि आपको एक समृद्ध व्यवसाय वस्तु बनाम अंतर्निहित डेटा कंटेनर मिल सके।
हालाँकि, यह संबंधित प्रतीत होता है, यदि समान नहीं, तो फैक्ट्री पैटर्न (DDD parlance, anyways) में, जो एक डोमेन ऑब्जेक्ट का निर्माण और रिटर्न करता है। विकिपीडिया यह पुनः कहता है: डीडीडी फैक्टरी:
फैक्ट्री: डोमेन ऑब्जेक्ट बनाने के तरीकों को एक विशेष फैक्ट्री ऑब्जेक्ट में सौंपना चाहिए, ताकि वैकल्पिक कार्यान्वयन आसानी से परस्पर जुड़ सकें।
केवल उस अंतर से जो मैं सोच सकता था, वह यह है कि DDD- स्टाइल फैक्ट्री को पैरामीटर बनाया जा सकता है ताकि यह एक विशेष प्रकार की वस्तु को लौटा सके यदि आवश्यकता उत्पन्न हुई (जैसे BusinessCustomer बनाम ResidentialCustomer) जबकि "मैपर" एक विशिष्ट वर्ग के लिए रखा गया है। और केवल अनुवाद करता है।
तो क्या इन दोनों प्रतिमानों में कोई अंतर है या वे मूल रूप से अलग-अलग नामों से एक ही हैं?
DataMapper
पैटर्न ने डेटाबेस को स्वयं एक्सेस किया है, जबकि यह "मैपर" डेटाबेस से नहीं खींचता है, बस किसी प्रकार के परिणाम सेट को ऑब्जेक्ट में परिवर्तित करता है।