2009-01-14 14 views
5

मान लीजिए कि आपके पास डोमेन इकाई उपयोगकर्ता है और आप उपयोगकर्ता को अपने शॉपिंग कार्ट में कोई आइटम जोड़ने की क्षमता का समर्थन करना चाहते हैं। अब, हम यह सुनिश्चित करें कि शॉपिंग कार्ट में आइटम अद्वितीय हैं बनाना चाहते हैं, इसलिए हम उपयोगकर्ता वर्ग के भीतर निम्नलिखित समारोह बनाने के लिए:क्या डोमेन या डोमेन में व्यापार तर्क रखा जाना चाहिए?

function AddItemToCart(Item item) 
{ 
    // Add business logic to make sure item is unique 
} 

यह काम करता है महान। लेकिन क्या होगा यदि अब भी जब भी कोई आइटम अपने कार्ट में जोड़ा जाता है तो उपयोगकर्ता को भी ई-मेल करना चाहते हैं? हम इसे AddItemToCart में जोड़ सकते हैं, लेकिन इसे उपयोगकर्ता वर्ग में किसी प्रकार की आईमेलर निर्भरता इंजेक्शन की आवश्यकता होगी।

विकल्प इस लेनदेन को संभालने के लिए एक सेवा बनाना होगा (जैसे शॉपिंगकार्ट सेवा) जो व्यवसाय तर्क करेगा और ई-मेल भेज देगा। हालांकि, यह एक बल्कि एनीमिक डोमेन की ओर जाता है (यानी उपयोगकर्ता वर्ग कुछ भी नहीं है लेकिन गेटर्स/सेटर्स)

+0

क्या होता है यदि साइट व्यवस्थापक फ़ोन कर रहा है तो क्या होगा? क्या आप निश्चित हैं कि User.AddItemToCart इस परिदृश्य में एक उचित डिज़ाइन है? –

उत्तर

4

तर्क जो उपयोगकर्ता के डोमेन तर्क का हिस्सा है, उपयोगकर्ता में रहना चाहिए। यह किसी सेवा के साथ उपयोगकर्ता इकाई इंजेक्शन शामिल हो सकता है या नहीं। मुझे लगता है कि यह इस बात पर निर्भर करता है कि सेवा उपयोगकर्ता वर्ग के व्यावसायिक तर्क का हिस्सा है, और क्या यह आपकी सर्वव्यापी भाषा का पालन करता है।

मैं इस बारे में होगा:

class ShoppingCartService 
{ 
    private EmailService emailer; 

    public void addItemToUserCart(User u, Item i) 
    { 
     u.addItemToCart(i); 
     this.emailer.sendEmailTo(u, "Item " + i.toString() + " was added to your cart"); 
    } 
} 

This related question चर्चा उपयोगी हो सकते हैं।

मैं सलाह देता हूं कि आप गेटर्स और सेटर्स को युग्मन को कम करने के लिए जितना संभव हो सके दायरे में प्रतिबंधित रखें।

0

विधि को रखें, फिर लेनदेन को संभालने के लिए एक सेवा कक्षा बनाएं। जब सेवा क्लास विधि में कॉल किया जाता है, तो आप वहां अपना ईमेलिंग तर्क इंजेक्ट कर सकते हैं।

2

उपयोगकर्ता पूरे डोमेन नहीं है "हालांकि, इस एक नहीं बल्कि कमजोर डोमेन की ओर जाता है (अर्थात उपयोगकर्ता वर्ग के अलावा कुछ नहीं getters/setters है)"।

आपके पास कार्ट, आइटम और परिष्कृत Cart.add() है जो आइटम को कार्ट में रखता है।

तो क्या होगा अगर उपयोगकर्ता वर्ग सरल लगता है?

+0

फिर आपके पास एक सरल उपयोगकर्ता वर्ग होगा .... जीवन चल रहा है। – Jobo

0

बड़ी प्रणालियों में उपयोगकर्ता-वर्ग के विभिन्न प्रकार के संचालन समाप्त हो जाएंगे। कक्षा बहुत बड़ी हो सकती है। इससे बचने के लिए, अन्य कक्षाएं होनी चाहिए जो उपयोगकर्ता के लिए चीजें करें।

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