2012-03-01 17 views
9

मुझे पता है कि हर कोई एक संपूर्ण वास्तुकला का उपयोग करता है जब एक MVC आवेदन के विकास कर रहा हूँ लेकिन मैं निम्नलिखित वास्तुकला है मान लें समझना: हमारे MVC अंदरनई वेब एपीआई दृष्टिकोण

App.Core --> Class Library (POCO or Domain objects) 
App.Data --> Class Library (Repository and Entity Framework) 
App.Service --> Class Library (Service layer with all business logic) 
App.Web --> asp.net MVC 3.0 project 

App.Data --> Has a reference to App.Core 
App.Service --> Has a reference to App.Core and App.Data 
App.Web --> Has a reference to App.Core and App.Service 

आवेदन हम इस दृष्टिकोण का पालन करने का प्रयास करते हैं:

  • हमारे नियंत्रक (विधि के भीतर) के अंदर, हम एक व्यूमोडेल को तुरंत चालू करते हैं।
  • हम को भरने कि ViewModel बुला हमारे App.Service लेयर
  • एक बार ViewModel भर जाता है से तरीकों, हम इसे देखें (ताकि दृश्य अब दृढ़ता से लिखा गया) पर वापस जाएँ।

यह 99.9% समय होता है। यह साफ है, हम इसे पसंद करते हैं और यह खुद को बहुत अच्छी तरह से लाभ देता है .. आदि!

अब मेरे सवाल है निम्नलिखित:

हम MVC 4.0 के लिए हमारे आवेदन के लिए कदम और नई वेब एपीआई दृष्टिकोण का उपयोग शुरू करने के लिए निर्णय लेते हैं, मुझे यकीन है कि मैं पूरी तरह से समझते जहां नहीं कर रहा हूँ (या कैसे) यह हमारे वर्तमान वास्तुकला में फिट होगा?

ध्यान रखें, कि हम इसे बदलने के लिए खुले हैं!

क्या हमें ऐप। सेवा और ऐप के बीच बैठने वाली एक नई ऐप.WebAPI परत बनाना चाहिए? इसका मतलब हमारे नियंत्रकों के अंदर है, हमें अब ऐप सेवा को कॉल करने की आवश्यकता नहीं होगी बल्कि इसके बजाय नई ऐप। वेबएपीआई परत?

या, ऐप। वेब परत के अंदर वेब एपीआई छोड़ दें और नियंत्रक अन्य एपीआईसींट्रोलर को कॉल करें जो बदले में ऐप. सेवा परत को कॉल करेगा?

सुनिश्चित नहीं है कि मैं यहां कोई समझ लेता हूं ... लेकिन कृपया कुछ भी सुझाव देने के लिए स्वतंत्र महसूस करें क्योंकि मैं विभिन्न इनपुट पर उत्सुक हूं।

धन्यवाद

उत्तर

13
वहाँ

मामलों के एक जोड़े पर विचार कर रहे हैं:

आप इस वेब एपीआई सेवा परत और अपने MVC आवेदन के लिए डेटा का उपयोग के रूप में काम करने के लिए करना चाहते हैं? यदि, हाँ, तो आपको एएसपी.नेट एमवीसी प्रोजेक्ट से ऐप। सेवा के सभी संदर्भों को पूरी तरह से हटा देना चाहिए और डेटा को लाने के बजाय इसे वेब एपीआई से पूछना चाहिए। इस मामले में वेब एपीआई आपके एएसपी.नेट एमवीसी अनुप्रयोग और डेटा एक्सेस के बीच बैठता है। यह वेब एपीआई है जो सेवा परत से बात करती है और इसे HTTP प्रोटोकॉल पर उजागर करती है।

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

+2

मेरा मानना ​​है कि आपका दूसरा दृष्टिकोण वह है जिसे हम ढूंढ रहे हैं। ध्यान में रखते हुए हमारे पास अन्य ग्राहक हो सकते हैं (आईपैड, आईफोन, इत्यादि ...)। तो निष्कर्ष यह है कि एमवीसी और वेब एपीआई दोनों एक ही परत के भीतर बैठें। उन्हें दोनों सेवा परत (जो व्यापार तर्क धारण करता है) के साथ बातचीत करें और बदले में, किसने बुलाया है, इस पर आधारित विभिन्न व्यू मॉडेल भरें। क्या वो सही है? – Vlince

+0

@ विल्न्स, बिल्कुल। आपने बहुत संक्षेप में इसका सारांश दिया है। –

+0

सहायता के लिए धन्यवाद :-) – Vlince

1

मुझे पता है कि यह देर हो चुकी है लेकिन मैं वास्तव में वही सलाह ढूंढ रहा था और मुझे यह पोस्ट मिला।

"" एमवीसी और वेब एपीआई दोनों एक ही परत के भीतर बैठे नहीं हैं "कोड पर अधिक रखरखाव कार्य, या शायद कोड का डुप्लिकेशन? ब्राउज़र क्लाइंट के रूप में माना जाने वाला एमवीसी वेब नहीं है? .. मेरे लिए यह समझ में आता है कि WebAPI आपके लिए एकमात्र परत है और बदले में यह आपकी सेवा परत को प्रसंस्करण के लिए बुलाएगा।

वेब एपीआई और एमवीसी दोनों को सेवा परत पर सीधे बात करने का क्या फायदा है? वेब एपीआई सेवा परत के चारों ओर रैपर नहीं हो सकता है?

+0

मुझे लगता है कि, दूसरे विकल्प में, वेब एपीआई का उपयोग केवल सेवा परत के कुछ हिस्सों को नेट पर बेनकाब करने के लिए किया जाएगा, इसलिए इसके कार्यों में बिल्कुल कोई तर्क नहीं होगा (केवल सेवा परत पर कॉल करें)। यह एक बहुत ही पतली प्रॉक्सी है, इसलिए इसे बनाए रखना आसान है और वहां डुप्लिकेट कोड होने का कोई मौका नहीं है। –

+0

अवधारणात्मक उदाहरण: आपके पास ऊपर वर्णित आर्किटेक्चर या इसके करीब कुछ है, उम्मीद है कि आप पूरी तरह से काम कर रहे एमसीवी वेबसाइट हैं। अब, आपके प्रबंधक का कहना है कि आपको मोबाइल ऐप्स की आवश्यकता है। आपको एक और परत की जरूरत है। आइए मान लें कि आपकी वेबसाइट में लॉगिन है। यह लॉगिन उपयोगकर्ता नाम/पासवर्ड पास करने वाली सेवा कॉल करता है और सफलता पर आपकी पूरी वेबसाइट पर प्रोफ़ाइल या त्रुटि पृष्ठ लौटाता है। एपीआई मोबाइल ऐप और सेवा परत, वेबसाइट के समान परत के बीच बैठता है, लेकिन इसके बजाय कुछ JSON लौटाता है {सफलता: सत्य, यूआईडी: कुछ-संख्या} फोन को प्रोफाइल पेज को अपनी प्रतिपादन विधि में खींचने की इजाजत देता है। –

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