मान लीजिए कि मेरे मॉडल (ईएफ का उपयोग करके) में विभिन्न इकाइयाँ हैं, उपयोगकर्ता, उत्पाद, चालान और आदेश कहते हैं।
मैं एक उपयोगकर्ता नियंत्रण लिख रहा हूं जो मेरे आवेदन में इकाई वस्तुओं के सारांश को प्रिंट कर सकता है जहां इकाइयां पूर्व-निर्धारित सेट से संबंधित हैं, इस मामले में मैं कहता हूं कि उपयोगकर्ता और उत्पाद का सारांश संक्षेप में प्रस्तुत किया जा सकता है।
सारांश में केवल एक आईडी और एक विवरण होगा, इसलिए मैं इसके लिए एक सरल इंटरफ़ेस बनाता हूं:
public interface ISummarizableEntity {
public string ID { get; }
public string Description { get; }
}
प्रश्न में संस्थाओं के लिए, मैं एक आंशिक वर्ग बनाता हूं जो इस इंटरफ़ेस को लागू करता है:
public partial class User : ISummarizableEntity
{
public string ID
{
get{ return UserID.ToString(); }
}
public string Description
{
get{ return String.Format("{0} {1} is from {2} and is {3} years old", FirstName, LastName, Country, Age); }
}
}
public partial class Product: ISummarizableEntity
{
public string ID
{
get{ return ProductID.ToString(); }
}
public string Description
{
get{ return String.Format("{0} weighs {1}{2} and belongs in the {3} department", ProductName, WeightValue, WeightUnit, Department); }
}
}
इस तरह मेरा उपयोगकर्ता नियंत्रण / आंशिक दृश्य सिर्फ ISummarizableEntity के किसी भी संग्रह के लिए बाध्य हो सकता है और इसे स्रोत में रुचि रखने की आवश्यकता नहीं है। मुझे बताया गया है कि इंटरफेस का उपयोग डेटाटाइप के रूप में नहीं किया जाना चाहिए, लेकिन मुझे इससे अधिक जानकारी नहीं मिली। जहां तक मैं देख सकता हूं, हालांकि इंटरफेस सामान्य रूप से व्यवहार का वर्णन करते हैं, बस गुणों का उपयोग करना अपने आप में एक विरोधी-पैटर्न नहीं है क्योंकि गुण वैसे भी गेटर्स / सेटर के लिए सिंटैक्टिक चीनी हैं।
मैं एक ठोस डेटाटाइप और संस्थाओं से नक्शा बना सकता है, लेकिन मैं इसका लाभ नहीं देख सकता। मैं इकाई वस्तुओं को एक अमूर्त वर्ग से विरासत में मिला सकता है और फिर गुणों को परिभाषित कर सकता हूं, लेकिन फिर मैं संस्थाओं को किसी और उपयोग के लिए बंद नहीं कर रहा हूं क्योंकि हमारे पास कई विरासत नहीं हो सकती हैं। अगर मैं चाहता तो ISummarizableEntity में कोई भी वस्तु होने के लिए भी खुला हूँ (जाहिर है कि मैं इंटरफ़ेस का नाम बदलूँगा)
जो समाधान मैं अपने दिमाग में इस्तेमाल कर रहा हूं, वह बनाए रखने योग्य, एक्स्टेंसिबल, टेस्टेबल और काफी मजबूत है। क्या आप यहां विरोधी पैटर्न देख सकते हैं?
EntitySummary
, जैसेUser
औरProduct
प्रत्येक के पास एक तरीका हैpublic EntitySummary GetSummary()
?