2011-09-04 19 views
6

मैं परतों में अलग एएसपी.NET एमवीसी 3 वेब एप्लिकेशन (ईएफ 4.1) पर काम कर रहा हूं: कुछ मामलों में मॉडल, रेपॉजिटरीज, सेवाएं, नियंत्रक, व्यू मॉडल्स, और दृश्य ।क्या एक इकाई सेवा वर्ग किसी अन्य इकाई की सेवा या उसके भंडार को कॉल करना चाहिए

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

उत्तर

1

मैं इस तरह के निर्णयों के लिए आमतौर पर उपयोग किए जाने वाले सिद्धांतों और प्रथाओं पर वापस आना चाहता हूं; DRY (स्वयं को दोहराएं मत) और KISS (इसे सरल रखें, बेवकूफ) यहां लागू हो सकता है।

जब तक आपको इकाई बी की सेवा कक्षा को बाईपास करने के परिणामस्वरूप कुछ तर्क दोहराने की आवश्यकता नहीं होती है, तो मैं इकाई ए की सेवा कक्षा से सीधे इकाई बी की रिपॉजिटरी को कॉल करता हूं।

यह एक मामूली विस्तार है, लेकिन इसका मतलब है कि सर्विस क्लासए> सर्विस क्लासबी> रिपोजिटरी क्लासबी के बजाय सेवा क्लासए> रिपोजिटरी क्लासबी शामिल है जो इसे मेरे दिमाग में एक आसान समाधान बनाता है।

HTH

0

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

फिर अपने SericesA दिखेगा:

class ServiceA : IServiceA 
{ 
    public ResultA Method1() { //some logic }; 
    public void Method2() { //some logic }; 
} 

ServiceB जो ServcieA पर निर्भर करता है।

class ServiceB: IServiceB 
{ 
    private IServiceA _serviceA; 
    public ServiceB(IServiceA serviceA) 
    { 
     _serviceA = serviceA; 
    } 

    public ResultB Method() 
    { 
     var result = _serviceA.Method1(); 
     // get result from service A and create and return result for service B 
    } 
}