क्या मुझे एक इकाई में या व्यापार परत में गणना तर्क रखना चाहिए?


16

हाल ही में मुझे इस सवाल का सामना करना पड़ा था कि क्या एक साधारण गणना को इकाई परत में रखा जाना चाहिए, या केवल कच्चे डेटा को संग्रहीत करने के लिए इकाई को शुद्ध होना चाहिए और व्यवसाय परत में गणना लॉगिक्स को छोड़ देना चाहिए।

तो मेरा सवाल यह है कि क्या एक इकाई वर्ग में गुणों में सरल गणनाओं को सम्मिलित करना समझदारी है?

जवाबों:


21

यह वास्तुकला के प्रकार पर निर्भर करता है जिसे आप चाहते हैं।

  • डोमेन ड्रिवेन डिज़ाइन में, आप एक डोमेन मॉडल बनाएंगे जिसमें डेटा और कार्यक्षमता दोनों होंगे।

इसका मतलब यह होगा कि Orderएक संपत्ति (या विधि) है जो के आधार पर आदेश की कुल कीमत लौटाएगी OrderLinesOrderयह भी एक विधि के लिए होता है AddOrderItem(Product product, int amount)और Orderअगर वहाँ पहले से ही है की जाँच करेगा OrderLineकि विशेष उत्पाद।

इस तरह के एक मॉडल में आपके पास ऐसी वस्तुएं भी होंगी जो वास्तविक इकाइयां नहीं हैं, जैसे Repositoryडेटा तक पहुंचने के लिए या Factoryसंस्थाएं बनाने के लिए। इन्हें Domain Services कहा जाता है। एक अनुप्रयोग परत डोमेन सेवाओं को कॉल करने के लिए जिम्मेदार है (उदाहरण के लिए डेटाबेस से किसी इकाई को पुनः प्राप्त करने के लिए) और फिर यह इकाई पर कार्यक्षमता निष्पादित करेगा। Application Layerसंभव के रूप में पतली होना चाहिए।

यह डीडीडी के बारे में एक अच्छा लेख है जो इन अवधारणाओं को अधिक विस्तार से बताता है।

  • आप एनीमिक डोमेन मॉडल का भी उपयोग कर सकते हैं । इसका मतलब है कि आपकी संस्थाओं में संपत्तियां / सेट शामिल हैं और इनमें कोई व्यवहार नहीं है। इस तरह के डिजाइन में, आपके बिजनेस लेयर में व्यवहार शामिल होगा, जैसे कि Orderमूल्य की गणना करना और डुप्लिकेट की जांच करना OrderLines

अलग-अलग राय है कि क्या एक एनीमिक डोमेन मॉडल एक बुरी चीज है। व्यक्तिगत रूप से मैं एक वास्तविक डोमेन मॉडल पसंद करता हूं।

यह लेख एक एनीमिक और गैर-एनीमिक डोमेन मॉडल के बीच अंतर का वर्णन करता है।


हाय राउटर, उत्तर और लिंक के लिए धन्यवाद। मुझे एक गलत दिमाग सेट का सामना करना पड़ रहा है कि जब एनीमिक डोमेन मॉडल का उपयोग किया गया था, तो सभी व्यावसायिक लॉजिक्स (यहां तक ​​कि बहुत सरल वाले) को व्यावसायिक परत में रखा जाना चाहिए। यह कुछ मामलों में गैर-समझदारी लगता है, जहां व्यापार तर्क वास्तव में केवल मॉडल पर निर्भर करता है। उदाहरण के लिए, एक संपत्ति की गणना मॉडल में मौजूदा गुणों से की जाती है। मुझे व्यापार तर्क को रखने के लिए एक समझदार कारण नहीं मिल सका है कि यह सभी व्यवसाय परत में ही मॉडल पर निर्भर करता है।

एनीमिक डोमेन मॉडल में, जैसा कि हमारे पास बिजनेस क्लास के साथ-साथ एंटिटी क्लास भी हैं, उन दोनों के बीच भ्रमित होने से बचने के लिए कक्षाओं का नाम कैसे रखें? क्या आप प्रत्यय का उपयोग करने का सुझाव देते हैं? यदि हाँ, तो क्या आप एक उदाहरण दे सकते हैं?
क्वाडज

DDD के लिए, क्या होगा यदि मूल्य गणना तर्क जटिल है? उदाहरण के लिए, मूल्य स्थान (कर), उपयोगकर्ता जानकारी (जन्मतिथि छूट, सदस्यता छूट), कूपन, क्रेडिट कार्ड (क्रेडिट कार्ड विशेष छूट) आदि पर आधारित है। हम इस तरह के तर्क को Orderकक्षा के अंदर कैसे रख सकते हैं ?
शेर १०

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

एनीमिक ... खराब डोमेन ऐसा लगता है जैसे यह किसी तरह की बीमारी से पीड़ित है। आप नहीं बल्कि प्रेरित हो जाएगा ?! हाँ!
मैट जेनकिन्स

1

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

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

एक महत्वपूर्ण बात याद रखना एक इकाई हमेशा एक पहचान होगी, लेकिन एक व्यापार वस्तु एक पहचान के साथ अस्तित्व में हैं। उदाहरण के लिए उत्पाद एक इकाई है लेकिन पैसे की कोई पहचान नहीं होगी। पैसे के 1000 अलग-अलग उदाहरण समान होंगे।


हाँ। यदि प्रॉपर्टी का व्यावसायिक तर्क सभी एक ही मॉडल पर मौजूदा गुणों पर निर्भर करता है, तो बेहतर होगा कि मॉडल में केवल संपत्ति जोड़ें। यह गणना की गई संपत्तियों के लिए व्यापार परत के साथ अनावश्यक जोड़े को ढीला करने में मदद करेगा।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.