मैं एक सी # MVC अनुप्रयोग है कि मैं निम्नलिखित तरीके से तोड़ मिल गया है: -> नियंत्रक -> सेवा - देखें> भंडारएक और सेवा परत खराब अभ्यास के लिए एक सेवा संदर्भ गुजर रहा है?
मुझे लगता है कि वापस आ रहा है एक अनूठा दृश्य मॉडल होने प्रत्येक दृश्य के साथ पतली नियंत्रक अभ्यास का उपयोग प्रासंगिक सेवा से।
त्वरित उदाहरण: दृश्य:/NewAppointment/चरण 1
इसके controler इस प्रकार दिखाई देगा:
public ActionResult Step1()
{
return View(_appointmentService.Step1GetModel());
}
और नियुक्ति सेवा परत इस प्रकार दिखाई देगा:
public Step1Model Step1GetModel()
{
return new Step1Model();
}
इस प्रकार
मेरे आवेदन के माध्यम से उपयोग में कई अलग-अलग सेवा परतें हैं, प्रत्येक एक अलग इंटरफेस को लागू करता है।
मेरा प्रश्न तब आता है जब मुझे एक सेवा परत अन्य सेवा परत के साथ बातचीत करने की आवश्यकता होती है। इस मामले में, क्या यह सेवा कॉल के इंटरफ़ेस संदर्भ को पारित करने के लिए बेहतर अभ्यास है, या क्या मुझे नियंत्रक को सभी डेटा एकत्रित करने और फिर संबंधित परिणामों को सेवा में वापस करने देना चाहिए?
उदाहरण:
मैं डिफ़ॉल्ट रूप से ग्राहक की जानकारी के साथ मेरे विचार मॉडल को भरने के लिए चाहते हैं। दो तरह से मैं ऐसा करने का देख रहे हैं:
नियुक्ति सेवा करने के लिए एक ग्राहक इंटरफ़ेस संदर्भ दर्रा, और फिर नियुक्ति सेवा कॉल ग्राहक सेवा में उचित GetCustomer विधि हैं ...
कोड में:
private ICustomerService _customerService;
private IAppointmentService _appointmentService;
public ActionResult Step1()
{
var viewModel = _appointmentService.Step1GetModel(_customerService);
return View(viewModel);
}
या
नियंत्रक ग्राहक होने का तर्क संभाल करते हैं, तो नियुक्ति सेवा करने के लिए है कि परिणाम गुजरती हैं।
कोड में:
private ICustomerService _customerService;
private IAppointmentService _appointmentService;
public ActionResult Step1()
{
var customer = _customerService.GetCustomer();
var viewModel = _appointmentService.Step1GetModel(customer);
return View(viewModel);
}
मैं फटे कर रहा हूँ के रूप में जो बेहतर अभ्यास होगा। पहला नियंत्रक अच्छा और पतला रखता है, लेकिन नियुक्ति सेवा और ग्राहक सेवा के बीच एक अंतर-सेवा निर्भरता बनाता है। दूसरा नियंत्रक में अधिक तर्क डालता है, लेकिन सेवाओं को पूरी तरह से स्वतंत्र रखता है।
किसी के पास विचार है कि कौन सा बेहतर अभ्यास होगा?
धन्यवाद ~
टिप्पणियों की सराहना करें। – TheRightChoyce
जो, कुंजी गलती दर्ज करें। मैं "गूंगा" दृश्य मॉडल के सिद्धांत का पालन कर रहा हूं .. इसमें से अधिकांश में एक कन्स्ट्रक्टर भी नहीं है और उनमें कभी भी कोई तरीका नहीं है। इस तरह प्रस्तुत करते समय, मुझे उनमें रचनाकार जोड़ने और फिर ऑटोमैपर का उपयोग करने या प्रासंगिक डोमेन परत जानकारी को पकड़ने के तर्क को देखने का तर्क दिखाई देता है। मुझे एक आंतरिक बहस हो रही है कि डोमेन मैपिंग के लिए सभी व्यवसाय कहां जाते हैं, और एक गूंगा दृश्य मॉडल और चीज़ नियंत्रक के विचार से चिपके हुए हैं, मैं उन्हें सेवा में चिपका रहा हूं ... – TheRightChoyce
यह बिल्कुल सही है परिदृश्य जो automapper के लिए बनाया गया था। मैं बहुत खुश हूं कि सहायता की जा सकी। – jonnii