2011-12-16 15 views
6

में विधियों को जोड़ना मेरे पास निम्नलिखित सेटअप है: एमवीसी> सेवाएं> रेपॉजिटरीज़। अब मैं उपयोगकर्ताओं को दस्तावेज़ में नोट जोड़ने में सक्षम होना चाहता हूं। केवल दस्तावेज़ से संबद्ध उपयोगकर्ता (या तो के रूप में मालिकों या समीक्षकों) तो मेरे NoteService में मैं उपयोगकर्ता चयनित दस्तावेज़ पर अनुमति है सुनिश्चित करने के लिए निम्न उपाय अपनाते हैं नोट्स जोड़ सकते हैं:पीओसीओ कक्षाओं

public Note GetNewNote(int documentID) 
    { 
     if (!userHasAccess(Thread.CurrentPrincipal.Identity.Name)) 
      throw new BusinessLogicException(); 

     // Other stuff here... 
    } 

मेरा प्रश्न है, जहां मैं परिभाषित करना चाहिए userHasAccess विधि? यह नोट सेवा में कोई समझ नहीं आता क्योंकि यह दस्तावेज़ पर जांच कर रहा है। मैं इसे दस्तावेज़ सेवा में परिभाषित कर सकता हूं लेकिन फिर नोटस सर्विस को उस तक पहुंच की आवश्यकता होगी जो अधिक युग्मन शुरू कर रहा है।

मेरे लिए इसे दस्तावेज़ POCO पर परिभाषित करने के लिए और अधिक समझदारी होती है और फिर document.userHasAccess (...) पर कॉल करें। क्या यह अच्छा अभ्यास होगा या एक डोमेन POCO सरल गुणों तक ही सीमित होना चाहिए? मुझे चिंता है कि यह वास्तव में सत्यापन का हिस्सा है और पीओसीओ में विधि रखकर मैं सेवा और पीओसीओ के बीच सत्यापन को अलग कर रहा हूं।

मैं यह सुनिश्चित करने की कोशिश कर रहा हूं कि मेरा आवेदन बनाए रखना और परीक्षण करना आसान है। मुझे इससे कैसे निपटना चाहिए इस पर कोई सुझाव सबसे सराहना की जाएगी!

+0

रूप में अच्छी तरह POCO इस चेक में जिम्मेदार बताते हैं userHasAccess की जांच किस तरह करते हैं? कोड एक्सेस सुरक्षा आपके लिए काम कर सकती है। – jgauffin

+0

यह सिर्फ यह जांचता है कि उपयोगकर्ता या तो दस्तावेज़ में है। ऑनर्स या दस्तावेज़। समीक्षाकर्ता - ये दस्तावेज और व्यक्ति के बीच कई रिश्ते हैं। – James

उत्तर

7

मुझे उपयोगकर्ता सहायता विधि को परिभाषित करना चाहिए?

यह बाकी डिजाइन के साथ संगत होने का एहसास है, जबकि मुझे पूरा डिज़ाइन नहीं पता है कि मैं कम से कम कह सकता हूं कि पीओसीओ पर UserHasAccess() नामक एक विधि स्वयं समझ में आता है।

क्या डोमेन पीओसीओ सरल गुणों तक सीमित होना चाहिए?

नहीं, एक डोमेन पीओसीओ में ऑब्जेक्ट से संबंधित तर्क (विशेष रूप से सत्यापन तर्क) होना चाहिए। अन्यथा, यह object with no behaviour होने के समाप्त होता है - कुछ निश्चित रूप से आपको टालना चाहिए।

हालांकि, किसी डोमेन (व्यवसाय) ऑब्जेक्ट और व्यू ऑब्जेक्ट के बीच भ्रमित न हों, जिसमें आम तौर पर थोड़ा तर्क होगा।

आप चिंतित हैं कि आप सेवा और पीओसीओ के बीच सत्यापन को अलग कर रहे हैं।

मैं पीओसीओ में सत्यापन और सेवाओं में क्रॉस-डोमेन तर्क डालता हूं।

+0

उत्तर और लिंक के लिए धन्यवाद। बस इसे थोड़ा फ्यूचर पर धक्का देने के लिए, पीओसीओ में किस प्रकार की वैधताएं होती हैं? क्या यह मेरे उदाहरण की तरह चीजें हैं, सरल तरीकों को जिन्हें सेवा द्वारा बुलाया जाता है? तो एक सेवा उन लोगों को कॉल कर सकती है जिन्हें यह निर्धारित करने की आवश्यकता है कि क्या सत्यापन अपवाद (या जो कुछ भी) नियंत्रक को फेंक दिया जाना चाहिए? या मेरे पीओसीओ पर कुछ प्रकार की वैध विधि होनी चाहिए? – James

+0

मेरे पास प्रत्येक पीओसीओ पर एक वैध विधि होगी - यह समझ में आता है कि एक पॉको जानता है कि यह मान्य है या नहीं। आपका उदाहरण थोड़ा अलग है और समझ में आता है कि यह एक विधि है। –

+0

वैध विधि विचार मुझे भ्रमित करता है क्योंकि पीओसीओ वैध को कॉल करने के लिए विभिन्न सेवा विधियों को अलग-अलग चीजों की आवश्यकता होगी। मेरे उदाहरण के साथ, userHasAccess सिर्फ पीओसीओ से पूछ रहा है अगर हम कुछ कर सकते हैं जबकि मेरे दिमाग में एक वैध विधि "उपयोगकर्ता नाम अद्वितीय होना चाहिए" जैसे चेक करेगा। क्या यह POCO को EntityFramework के साथ जोड़ना शुरू नहीं करता है? – James

0

किसी भी डोमेन इकाई में सत्यापन विधियां भी हो सकती हैं।

+1

हालांकि यह अच्छा अभ्यास है?मैं अपने पीओसीओ कक्षाओं में केवल इन सरल तरीकों को जोड़ने शुरू नहीं करना चाहता हूं ताकि बाद में यह पता चल सके कि इसे बनाए रखना/परीक्षण करना मुश्किल हो जाता है। सभी अनुभागों को एक सेक्शन में रखना अच्छा लगेगा - उपर्युक्त उदाहरण के साथ मैं _could_ सिर्फ यह जांचता हूं कि उपयोगकर्ता दस्तावेज़ में है या नहीं। ऑनर और फिर दस्तावेज़ में। समीक्षाकर्ताओं लेकिन मुझे बार-बार इस तर्क को दोहराना होगा अपनी विधि हो। – James

0
  1. यदि आप डोमेन मॉडल पैटर्न का पालन कर रहे हैं तो आप व्यवहार के साथ गुण जोड़ सकते हैं। चेक Martin fowler
  2. द्वारा इस को मान रहे है तो तालिका मॉड्यूल पैटर्न तो BLL कक्षा में व्यवहार जोड़ सकते हैं और द्वारा Martin fowler
संबंधित मुद्दे