स्मार्ट ऑब्जेक्ट से मैं किसी भी डोमेन ऑब्जेक्ट पर विचार करता हूं जो संपत्ति को बदलते समय इसकी मूल संपत्ति मान जानता है। स्मार्ट ऑब्जेक्ट्स में आमतौर पर बेस क्लास होता है और GetPropertyValue/SetPropertyValue विधियों का उपयोग कर गुणों को लागू करता है। दूसरी तरफ पीओसीओ ऑब्जेक्ट्स में आमतौर पर कोई बेस क्लास नहीं होगी और सरल गुण लागू होंगे।डोमेन ऑब्जेक्ट्स - "स्मार्ट ऑब्जेक्ट" बनाम पीओसीओ
public class SmartObject : BaseDomainObject
{
public int id
{
get { return (int)this.GetPropertyValue("Id"); }
set { this.SetPropertyValue("Id", value); }
}
}
public class POCO
{
public int id { get; set; }
}
मुझे स्मार्ट ऑब्जेक्ट पसंद है क्योंकि यह मेरे लिए बहुत मेहनत करता है। मैं आसानी से उन सभी उपयोगी सुविधाओं BaseDomainObject करने के लिए अपने सभी व्युत्पन्न डोमेन कक्षाओं में जोड़ने और उन्हें हो सकता है:
- आम गुण (क्रमांक, स्थिति ...) की तरह
- वस्तु राज्य ट्रैकिंग (नई, संशोधित, नहीं बदला गया)
- सभी गुण गुण परिवर्तन पर घटनाओं (INotifyProperyChanged के कार्यान्वयन) जुटाने
- व्युत्पन्न वर्ग किया जा सकता स्वचालित रूप से serializable
- मैं यह सब अन्य ऐसे व्यवहार को उपयोगी हो सकता है हो सकता है (हालांकि मैं शायद ही कभी इस उपयोगी पाते हैं) - क्लोन/सिंक/IsPropertyDirty ...
दूसरी तरफ पीओसीओ बहुत सरल हैं और किसी भी बेस क्लास के लिए कोई निर्भरता नहीं है।
आजकल मैं यहाँ POCO का एक बहुत की तारीफ है क्योंकि:
- यह (आमतौर पर JSON के रूप में वेब ब्राउज़र के लिए) तार पर भेजा जा सकता
- यह शुद्ध
दूसरी ओर है हाथ मुझे लगता है कि उपरोक्त कारणों में कमी आई है क्योंकि:
- डीटीओ वायर ट्रांसफर के लिए हैं और डोमेन ऑब्जेक्ट्स नहीं हैं। जब डोमेन ऑब्जेक्ट JSON को क्रमबद्ध किया जाता है तो व्यवहार खोने पर व्यवहार encapsulating।
- शुद्धता सीमों के लिए यह पीछा भी अधिक एनीमिक डोमेन मॉडल के लिए पीछा करना है जिसमें तर्क नहीं है और न ही इससे जुड़ा कुछ भी स्मार्ट है।
इस सब दुखद के साथ, मुझे अभी भी वह पॉको पसंद है और यह मुझे खराब करता है। आप की राय क्या है?
आप एक अमीर डोमेन मॉडल के लिए प्रयास कर रहे हैं, तो हैं, यह अपवित्र नहीं है तकनीकी बुनियादी ढांचे की चिंताओं के साथ। आपके द्वारा उल्लिखित सभी चीजें - राज्य ट्रैकिंग, संपत्ति ने घटनाओं को बदल दिया, क्रमबद्धता - इन चीजों में से कोई भी डोमेन के साथ कुछ भी नहीं करना है। वे मॉडल में व्यापार डोमेन की जटिलता को एन्कोड करने के लिए कुछ भी नहीं करते हैं। – MattDavey
दूसरी ओर, एक POCO भी मॉडल में डोमेन जटिलता एन्कोड करने के लिए कुछ नहीं करता है। तो डीडीडी मानकों से, दोनों दृष्टिकोण बहुत खराब हैं। – MattDavey
@MattDavey मैं आपकी पहली टिप्पणी से सहमत हूं लेकिन मुझे बाद वाले के बारे में निश्चित नहीं है। पोको! = एनीमिक, अगर आप यही कह रहे हैं। सादा पुराना ऑब्जेक्ट ओरिएंटेड * क्या व्यवहार शामिल है, और यदि लागू हो, तो डोमेन व्यवहार, डेटा के अतिरिक्त। – guillaume31