2009-03-15 17 views
5

मैं कुछ डोमेन ऑब्जेक्ट मॉडल में देख रहा हूं कि सभी डोमेन एंटीटी ऑब्जेक्ट्स के लिए अपनी पहचान प्राप्त करने के लिए एक सार आधार वर्ग बनाया गया है (जो बराबर और गेटहाशकोड लागू करता है)।सभी डोमेन इकाई ऑब्जेक्ट्स के लिए सार बेस क्लास

मुझे स्पष्ट नहीं है कि इस बेस क्लास की आवश्यकता क्यों है और इसका उपयोग कब और क्यों किया जाना चाहिए। क्या आप मुझे इस पर कुछ अंतर्दृष्टि प्रदान या मुझे एक लिंक पर इस

धन्यवाद

अब मैं समानता अधिभावी के फायदे समझ में बात करती है उल्लेख कर सकते हैं

डोमेन के लिए वापस जा रहे हैं (इस लिंक http://en.csharp-online.net/CSharp_Canonical_Forms -Identity_Equality मदद की) संचालित डिजाइन मैं अपने प्रश्न को थोड़ा विस्तारित करना चाहता हूं;

मेरे पास एक ग्राहक इकाई है जिसे मैं पहचान के रूप में guid का उपयोग करता हूं।

यदि मैं बिल्कुल उसी विवरण के साथ ग्राहक के 2 उदाहरण बना देता हूं, क्योंकि मैं पहचान के रूप में guid का उपयोग कर रहा हूं, तो वे दो अलग-अलग ऑब्जेक्ट्स होंगे। लेकिन जैसा कि उनके पास सभी गुण समान हैं (या यह उन्हें अद्वितीय और अलग रखने के लिए एक बेहतर अजीब अभ्यास होना चाहिए ??)

यह समझने की कोशिश कर रहा हूं कि मुझे दो वस्तुओं की समानता को पूर्ण रूप से संभालना चाहिए या नहीं विशेषता मूल्य मिलान। यदि मैं उस दिशा की तरफ जाता हूं तो मैं या तो उप वर्ग के स्तर पर आधार वर्ग की समानता को ओवरराइड कर रहा हूं और इन शर्तों को लागू करता हूं या इकाई की पहचान स्ट्रिंग या हैश कोड (?) के मूल्यों का प्रतिनिधित्व करता हूं इन विशेषताओं और आधार वर्ग की समानता का उपयोग करें।

मैं यहां से थोड़ा दूर हो सकता था इसलिए धैर्य के लिए अग्रिम धन्यवाद।

+0

आप की बात कर रहे हैं के विवरण प्रदान करें:

एक महान लेख वर्णन करने वाली नहीं है। आप कुछ उद्योग-व्यापी अभ्यास नहीं देख रहे हैं जो हर किसी के बारे में जानता है - आप उन विवरणों के लिए विशिष्ट कुछ देख रहे हैं जो आप हमें प्रदान नहीं कर रहे हैं! –

+0

आशा है कि यह बेहतर होगा - मैं स्पष्ट नहीं था कि मुझे इस सवाल का पालन करने के रूप में दूसरा प्रश्न कहां पोस्ट करना चाहिए, इसलिए मैंने इसे अपने मूल प्रश्न को संपादित करके रखा है। –

उत्तर

3

समानता यहाँ ओवरलोड हो गया है अवधि के उपयोग में उपयोग करते हुए:

1) के लिए समानता पहचान

यदि आपके पास एक ही ग्राहक के 2 उदाहरण हैं, तो दोनों के पास एक ही GUID मान होना चाहिए - यह सुनिश्चित करने का एकमात्र तरीका है कि आप एक ही इकाई के साथ काम कर रहे हैं। हकीकत में, हमेशा एक ही इकाई के अलग-अलग उदाहरण होंगे (उदाहरण के लिए विभिन्न मशीनों पर चल रहे बहु-उपयोगकर्ता ऐप्स)।

2) समानता

के लिए समानता यह तुम कहाँ जाँच कर रहे हैं कि 2 उदाहरणों सभी एक ही मान है। उदाहरण के लिए, यदि 2 कर्मचारी सदस्य एक ही ग्राहक को देख रहे हैं, और पहला व्यक्ति & संशोधित करता है, तो दोनों लोग अलग-अलग डेटा देखेंगे। वे दोनों एक ही ग्राहक में रुचि रखते हैं, लेकिन डेटा पुराना हो जाता है।

के लिए (2), आपको निश्चित रूप से जांच करने के लिए एक तंत्र की आवश्यकता है।आप प्रत्येक संपत्ति (महंगी) की तुलना कर सकते हैं, या आप परिवर्तनों का पता लगाने के लिए 'संस्करण' संपत्ति का उपयोग कर सकते हैं (NHibernate’s optimistic locking mechanism देखें)।

मुझे लगता है कि आपका उदाहरण थोड़ा सा है, और शायद आपको डीडीडी के अधिक महत्वपूर्ण पहलुओं से दूर ले जाया जा सकता है। यदि आप रुचि रखते हैं, I sell a tool जो डीडीडी अवधारणाओं को आसान समझने में मदद कर सकता है।

0

आपने इसका उपयोग क्यों किया जाता है इसके दो कारणों पर ध्यान दिया।

बराबर के लिए आप हमेशा यह जांचना नहीं चाहेंगे कि वास्तविक संदर्भ बराबर है, क्योंकि यह नहीं हो सकता है। आप यह देखने के लिए जांच कर सकते हैं कि 2 इकाइयां बराबर हैं या नहीं, आप किसी प्रकार की पहचान संपत्ति (जैसे सार्वजनिक int आईडी) का उपयोग करना चाह सकते हैं। बराबर का मूल कार्यान्वयन सिर्फ यह जांचने जा रहा है कि 2 संदर्भ बराबर हैं या नहीं।

जहाँ तक हैश कोड के रूप में यह एक तरह से विशिष्ट रूप से एक दिया वस्तु/प्रकार की पहचान करने के लिए जब यह हैश एल्गोरिदम आदि

0

मैं केवल पहचान पर जांच करता हूं, क्योंकि यह आपको पहले और बाद में स्थिति वाली एक इकाई का उदाहरण देता है, जो कभी-कभी बहुत आसान हो सकता है। यह जांचने के लिए कि कोई उदाहरण बदल गया है, एक गंदा ध्वज चाल कर सकता है।

HTH, जोनाथन

1

आप DDD का अनुसरण कर रहे हैं, तो मेरा मानना ​​है कि आप अपनी आईडी (पहचान) द्वारा वस्तुओं की समानता पर जांच होनी चाहिए। ऐसा इसलिए है क्योंकि डोमेन इकाइयां प्राथमिक परिभाषित हैं और इसकी पहचान से ट्रैक की जाती हैं, न कि गुणों से। इससे कोई फर्क नहीं पड़ता कि वे अन्य वस्तुओं के साथ कितने समान हैं, वे अभी भी अलग-अलग संस्थाएं हैं।

एक अन्य अवधारणा जिसे आप देखना चाहते हैं वह एक मूल्य वस्तु है। यह ऐसा कुछ है जो वस्तु के एक charasteristics का वर्णन करता है और पहचान की आवश्यकता नहीं है। उदाहरण होगा, पता, पैसा, रंग।

1

यदि आप इकाइयां हैं और यदि वे मूल्य वस्तुएं हैं तो उन्हें वस्तुओं की आईडी की तुलना करनी चाहिए। इसका मतलब है कि आपको मूल इकाई से अपनी मूल्य वस्तुओं का उत्तराधिकारी नहीं होना है, लेकिन संस्थाओं के लिए एक बनाना बेहतर है।

कैसे समझें कि कक्षा एक इकाई या मूल्य वस्तु है या नहीं? आपको एक प्रश्न का उत्तर देना चाहिए: क्या ऐसी कक्षा के सामान समान हैं यदि उनके पास एक ही विशेषता सेट है? यदि हां, तो वे मूल्य वस्तुएं हैं। उदाहरण के लिए, दो व्यक्ति बराबर नहीं हैं, भले ही उनके पास समान नाम और जन्म तिथियां हों - आपको उन्हें अलग-अलग संस्थाओं के रूप में व्यवहार करना चाहिए। लेकिन अगर आपके पास 25 सेंट सिक्का है, तो शायद आपको परवाह नहीं है कि सटीक धातु के टुकड़े आपके पास हैं, वे सभी केवल 25 सेंट सिक्के हैं। domain object base class

संबंधित मुद्दे