वस्तुओं का प्रकार
हमारी चर्चा के उद्देश्यों के लिए, हमारी वस्तुओं को तीन अलग-अलग प्रकारों में विभाजित करें:
ये वो वस्तुएं हैं जो काम करवाती हैं। वे एक चेकिंग खाते से दूसरे खाते में पैसा ले जाते हैं, आदेशों को पूरा करते हैं, और अन्य सभी कार्यों के लिए जो हम व्यापार सॉफ़्टवेयर से अपेक्षा करते हैं।
डोमेन लॉजिक ऑब्जेक्ट को आमतौर पर एक्सेसर्स (गेटर्स और सेटर) की आवश्यकता नहीं होती है। इसके बजाय, आप एक निर्माता के माध्यम से निर्भरता सौंपकर ऑब्जेक्ट बनाते हैं, और फिर विधियों के माध्यम से ऑब्जेक्ट को हेरफेर करते हैं (बताओ, मत पूछो)।
डेटा ट्रांसफर ऑब्जेक्ट्स शुद्ध स्थिति हैं; उनके पास कोई व्यावसायिक तर्क नहीं है। उनके पास हमेशा एक्सेसर्स होंगे। हो सकता है या नहीं, वे इस बात पर निर्भर करते हैं कि आप उन्हें अपरिवर्तनीय तरीके से लिख रहे हैं या नहीं । आप या तो अपने फ़ील्ड को कंस्ट्रक्टर में सेट करेंगे और उनका मान ऑब्जेक्ट के जीवनकाल के लिए नहीं बदलेगा, या आपके एक्सेसर्स को पढ़ा / लिखा जाएगा। व्यवहार में, ये वस्तुएं आमतौर पर परिवर्तनशील होती हैं, ताकि एक उपयोगकर्ता उन्हें संपादित कर सके।
देखें मॉडल वस्तुओं में एक प्रदर्शन करने योग्य / संपादन योग्य डेटा प्रतिनिधित्व होता है। उनमें व्यावसायिक तर्क हो सकते हैं, आमतौर पर डेटा सत्यापन तक ही सीमित होते हैं। एक दृश्य मॉडल ऑब्जेक्ट का एक उदाहरण एक चालान व्यूमॉडल हो सकता है, जिसमें ग्राहक ऑब्जेक्ट, एक चालान हेडर ऑब्जेक्ट और चालान लाइन आइटम शामिल हैं। देखें मॉडल ऑब्जेक्ट में हमेशा एक्सेसर्स होते हैं।
तो एकमात्र प्रकार की वस्तु जो "शुद्ध" इस अर्थ में होगी कि इसमें फ़ील्ड एक्सेसर्स शामिल नहीं है डोमेन तर्क ऑब्जेक्ट होगा। इस तरह के ऑब्जेक्ट को सीरियल करने से इसकी वर्तमान "कम्प्यूटेशनल स्थिति" बच जाती है, ताकि बाद में इसे पूरा करने के बाद प्रोसेसिंग पूरी हो सके। देखें मॉडल और डीटीओ को स्वतंत्र रूप से क्रमबद्ध किया जा सकता है, लेकिन व्यवहार में उनका डेटा सामान्य रूप से डेटाबेस में सहेजा जाता है।
क्रमांकन, निर्भरता और युग्मन
हालांकि यह सच है कि क्रमबद्धता निर्भरता पैदा करती है, इस अर्थ में कि आपको किसी संगत वस्तु के लिए प्रेरित करना है, यह जरूरी नहीं है कि आपको अपने क्रमांकन विन्यास को बदलना होगा। अच्छा क्रमांकन तंत्र सामान्य उद्देश्य हैं; यदि आप किसी संपत्ति या सदस्य का नाम बदलते हैं, तो वे परवाह नहीं करते हैं, जब तक कि यह अभी भी सदस्यों को मान मैप कर सकता है। व्यवहार में, इसका अर्थ केवल यह है कि आपको अपनी नई वस्तु के साथ संगत क्रमांकन प्रतिनिधित्व (xml, json, जो भी हो) बनाने के लिए ऑब्जेक्ट उदाहरण को फिर से क्रमबद्ध करना होगा; धारावाहिक में कोई विन्यास परिवर्तन आवश्यक नहीं होना चाहिए।
यह सच है कि वस्तुओं को इस बात से चिंतित नहीं होना चाहिए कि वे किस प्रकार क्रमबद्ध हैं। आपने पहले से ही एक तरह से वर्णित किया है कि इस तरह की चिंताओं को डोमेन कक्षाओं से हटाया जा सकता है: प्रतिबिंब। लेकिन धारावाहिक को इस बारे में चिंतित होना चाहिए कि वह वस्तुओं को कैसे क्रमबद्ध और विचलित करता है; आखिरकार, इसका कार्य है। जिस तरह से आप अपनी वस्तुओं को अपने क्रमांकन प्रक्रिया से अलग रखते हैं, वह क्रमांकन को एक सामान्य-उद्देश्य फ़ंक्शन बनाने के लिए है, जो सभी प्रकारों में काम करने में सक्षम है।
लोगों को भ्रमित करने वाली चीजों में से एक यह है कि डिकॉउलिंग को दोनों दिशाओं में होना है। ऐसा नहीं होता; इसे केवल एक दिशा में काम करना है । व्यवहार में, आप कभी भी पूरी तरह से विघटित नहीं हो सकते; वहाँ हमेशा कुछ युग्मन है। ढीले युग्मन का लक्ष्य कोड रखरखाव को आसान बनाना है, न कि सभी निर्भरताओं को दूर करना।