2009-06-01 29 views
8

क्या किसी के पास एएसपी.NET एमवीसी एप्लिकेशन में मॉडल के रूप में वेब सेवा का उपयोग करने पर सलाह या सुझाव हैं? मैंने इसे करने के बारे में किसी को भी नहीं लिखा है। मैं एक एमवीसी ऐप बनाना चाहता हूं, लेकिन एक विशिष्ट डेटाबेस का उपयोग करने के लिए इसे टाई नहीं, न ही डेटाबेस को एकल एमवीसी ऐप तक सीमित कर दूंगा। मुझे एक वेब सेवा (रीस्टफुल, सबसे अधिक संभावना एडीओ.Net डेटा सर्विसेज) महसूस करने का तरीका है।एएसपी.Net एमवीसी मॉडल के रूप में वेब सेवा के साथ?

उत्तर

3

2010-11-27 संपादित करें; मेरे विचारों को स्पष्ट किया, जिसकी वास्तव में आवश्यकता थी।

एक वेब सेवा विभिन्न प्रकार के अनुप्रयोगों में कार्यक्षमता का खुलासा करती है, न कि एक ही अनुप्रयोग में अमूर्तता के लिए। आप शायद कमांड को समाहित करने के तरीके के बारे में सोच रहे हैं और इस तरह से पढ़ते हैं जो आपके नियंत्रक/प्रोग्रामिंग को हस्तक्षेप नहीं करता है।

सेवा बस से सेवा का उपयोग करें यदि आप decoupling के बाद हैं और अपने async पृष्ठों में एसिंक पैटर्न करते हैं। आप कुछ अलग http://blogs.digitar.com/jjww/2009/01/rabbits-and-warrens/ के लिए नेट मूल कार्यान्वयन और RabbitMQ के लिए Rhino.ServiceBus, nServiceBus और MassTransit देख सकते हैं।

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

आप बस सेवा इंटरफेस भी प्रदान कर सकते हैं। अधिक विस्तृत विवरण के लिए एरिक इवान के डोमेन संचालित डिजाइन पढ़ें।

REST-ful सेवा इंटरफेस डेटा के साथ बहुत कुछ सौदा करता है, और अधिक विशेष रूप से पता योग्य संसाधनों के साथ। यह आपके प्रोग्रामिंग मॉडल को बहुत सरल बना सकता है और HTTP प्रोटोकॉल के माध्यम से आउटपुट पर बहुत अधिक नियंत्रण की अनुमति देता है। डब्ल्यूसीएफ का आगामी प्रोग्रामिंग मॉडल मूल थीसिस में परिभाषित सत्य आराम का उपयोग करता है, जहां प्रत्येक दस्तावेज़ को कुछ हद तक निरंतर नेविगेशन के लिए यूआरआई प्रदान करना चाहिए। look at this है। (इस पोस्ट के मेरे पहले संस्करण में, मैंने 'धीमा' होने के लिए आरईएसटी को शोक किया, जो भी इसका मतलब है) आरईएसटी-आधारित एपीआई भी CouchDB और Riak उपयोगों से काफी अधिक हैं।

एडीओ.Net कोड-टू-कार्यान्वयन, डेटा-पहुंच रिसाव के कारण आलसी संग्रह के साथ एन + 1 समस्याएं हैं - आपको हमेशा अपने डीबी संदर्भ की आवश्यकता है जहां आपका क्वेरी कोड आदि है) की तुलना में उदाहरण के लिए लाइटस्पीड (वाणिज्यिक) या एनएचबेर्नेट। Spring.Net आपको एक वेब सेवा मुखौटा के साथ अपने इंटरफेस में सेवा इंटरफेस लपेटने की अनुमति देता है, लेकिन (थोड़ी देर के लिए इसे ब्राउज़ किए बिना) मुझे लगता है कि यह इसकी कॉन्फ़िगरेशन में थोड़ा सा एक्सएमली है।

संपादित करें 1: एडीओ.Net के साथ मेरा मतलब है डेटासेट्स, डेटा एडाप्टर के साथ डिफ़ॉल्ट "सर्वोत्तम अभ्यास" और डेटारिएडर से कई पंक्तियों को फिर से शुरू करना; यह बदसूरत और हार्ड-टू-डीबग कोड पैदा करता है। एन + 1 सामान, हाँ, यह इकाई ढांचे के बारे में है।

(संपादित करें 2: EntityFramework मुझे या तो प्रभावित नहीं है!)

संपादित करें 1: [उर्फ एक अलग विधानसभा में अपने डोमेन परत बनाएं। कोर] और वहां सभी डोमेन और एप्लिकेशन सेवाएं प्रदान करें, फिर इस असेंबली को अपने विशिष्ट एमवीसी एप्लिकेशन से आयात करें। अपने मूल असेंबली में एक इंटरफ़ेस के माध्यम से, कुछ डीएओ/रिपोजिटरी में डेटा एक्सेस लपेटें, जो आपकी डेटा असेंबली तब संदर्भ और लागू करता है। आईओसी के साथ वायरस इंटरफ़ेस और कार्यान्वयन। आप इंटरफेस के लिए हल करने के लिए उपर्युक्त सेवा बसों के साथ गतिशील सेवा खोज के लिए कुछ भी प्रोग्राम कर सकते हैं। डब्ल्यूसीएफ इस तरह के इंटरफेस का उपयोग करता है और इसलिए उपरोक्त सेवा बस्तियों में से अधिकांश करते हैं; आप अपने आईओसी कंटेनर में स्वचालित रूप से ऐसा करने के लिए एक subcomponentresolver प्रदान कर सकते हैं।

संपादित करें 2: उपरोक्त के लिए एक महान कॉम्बो सीक्यूआरएस + इवेंट सोर्सिंग + प्रतिक्रियाशील एक्सटेंशन होगा। आपका लेखन-मॉडल कमांड लेगा, आपका डोमेन मॉडल यह तय करेगा कि उन्हें स्वीकार करना है या नहीं, यह घटनाओं को प्रतिक्रियाशील-एक्सटेंशन पाइपलाइन पर धक्का देगी, शायद खरगोश एमक्यू पर भी, जो आपका रीड-मॉडल उपभोग करेगा।

अद्यतन 2010-01-02 (संपादित 1)

मेरा विचार की हंसी कुछ MindTouch ड्रीम कहा जाता द्वारा संहिताबद्ध किया गया है। उन्होंने एक स्क्रीनकास्ट बनाया है जहां वे एक वेब अनुप्रयोग के लगभग सभी हिस्सों को एक (वेब) सेवा के रूप में मानते हैं, जो आरईएसटी के साथ भी खुलासा हुआ है।

उन्होंने अपने स्वयं के लोचदार थ्रेड पूल सहित इसे संभालने के लिए सह-दिनचर्या का उपयोग करके अत्यधिक समानांतर ढांचा बनाया है।

इस प्रश्न में सभी नायकों के लिए, आपके चेहरे में: पी! Listen to this screen-cast, खासकर 12 मिनट में।

The actual framework is here.

आप प्रोग्रामिंग की इस तरह में कर रहे हैं, how monads work और their implementations in C# पर एक नजर है। आप CoRoutines पर भी पढ़ सकते हैं।

नया साल मुबारक हो!

अद्यतन 2010-11-27 (संपादित 2)

यह CoRoutines निकला Microsoft से कार्य समानांतर पुस्तकालय के साथ productized गया। आपका कार्य अब एक ही विशेषताओं को लागू करता है, क्योंकि यह IAsyncResult लागू करता है। कैलिबर्न एक अच्छा ढांचा है जो उनका उपयोग करता है।

प्रतिक्रियाशील एक्सटेंशन ने एसिंक्रोनोसिटी के अगले स्तर पर मोनाद समझ ली।

एएलटी.Net दुनिया उस दिशा में आगे बढ़ रही है जब मैंने पहली बार यह जवाब लिखा था, हालांकि नए प्रकार के आर्किटेक्चर के साथ मुझे थोड़ा पता था।

+0

आप ADO.Net की तुलना ORM (अनुच्छेद # 4) से कर रहे हैं? क्या आपका मतलब LINQ2SQL या EF था? – MotoWilliams

+0

खैर, ओआरएम ADO.Net का उपयोग करता है; मैं डेटाबेस का मुख्य इंटरफ़ेस के रूप में उनका उपयोग करके तुलना कर रहा था, इस मामले में यह समझ में आता है। Ado.net पर – Henrik

+0

एन + 1? मेरा मतलब गंभीरता से है .... आलसी लोड किए गए संग्रह केवल कुछ परिदृश्यों में एन + 1 का कारण बनते हैं जिन्हें आप निबर्ननेट के साथ पहुंचेंगे। यही कारण है कि आपके पास linq2sql सहित किसी भी उचित ORM में fetch रणनीतियों के माध्यम से प्रति-क्वेरी उत्सुक लोडिंग है। जैसा होता है, निबर्ननेट वास्तव में आपके डीबी कनेक्शन के लिए ado.net चला रहा है ... – SerialSeb

3

आपको अपने मॉडल को डेटा एक्सेस अज्ञेय तरीके से परिभाषित करना चाहिए, उदा। रिपोजिटरी पैटर्न का उपयोग कर। फिर आप विशिष्ट डेटा एक्सेस टेक्नोलॉजीज (वेब ​​सेवा, एसक्यूएल, आदि) द्वारा समर्थित ठोस कार्यान्वयन बना सकते हैं।

28

आपके एमवीसी ऐप को आपके डेटाबेस से डीकॉप्ल करने के लिए कितना संभव है, या उपयोगी है? आपने कितनी बार देखा है, आपके आवेदन जीवनकाल में, SQL सर्वर से ओरेकल में परिवर्तन? मैंने पिछले 10 वर्षों की परियोजनाओं को वितरित कर दिया है, यह कभी नहीं हुआ है।

आर्किटेक्चर प्याज की तरह हैं, उनके पास निर्भर चीजों के ऊपर सार तत्वों की परतें हैं जिन पर वे निर्भर हैं। और यदि आप स्टोरेज के लिए आरडीबीएमएस का उपयोग करने जा रहे हैं, तो यह आपके आर्किटेक्चर के मूल में है। डीबी से खुद को सारणीबद्ध करना ताकि आप इसे चारों ओर स्वैप कर सकें।

अब आप अपने डोमेन से अपने डेटाबेस का उपयोग रद्द कर सकते हैं, और रिपोजिटरी पैटर्न ऐसा करने के तरीकों में से एक है। सबसे परिपक्व समाधान एक ORM का उपयोग इन दिनों, तो आप NHibernate पर एक नजर है अगर आप एक परिपक्व प्रौद्योगिकी, या अपने डेटा के शीर्ष पर एक सरल सक्रिय रिकॉर्ड पैटर्न के लिए ActiveRecord/linq2sql चाहते कर सकते हैं।

अब आप अपने डेटा रणनीति है तो आप उसे किसी प्रकार का डोमेन है।जब आप अपने क्लाइंट को डेटा का पर्दाफाश करते हैं, तो आप एमवीसी पैटर्न के माध्यम से ऐसा करना चुन सकते हैं, जहां आप आमतौर पर प्रतिपादन के लिए अपने डोमेन से उत्पन्न डीटीओ भेज देंगे, या आप अधिक ढीले युग्मित सिस्टम प्रदान करने के लिए आरईएसटी जैसी आर्किटेक्चर शैली का लाभ उठाने का निर्णय ले सकते हैं। , लिंक और कस्टम प्रतिनिधित्व प्रदान करके।

आप अपने समाधान की बाहरी परतों की ओर जाने के रूप में तंग युग्मन से लूसर युग्मन से जाते हैं।

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

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

आपके सटीक परिदृश्य पर निर्भर करता है, लेकिन अनुभव से एमवीसी में मॉडल के रूप में दूरस्थ एक्सएमएल-आधारित सेवा, एक अच्छा विचार नहीं है, यह शायद अधिक इंजीनियरिंग है और डोमेन के साथ शुरू करने की आवश्यकता को अनदेखा कर रहा है।

+0

तेजी से, उद्यम अनुप्रयोगों को किसी भी विक्रेता से डेटाबेस का उपयोग करने में सक्षम होना आवश्यक है, और आपका सॉफ़्टवेयर ऐसा करने में सक्षम होना चाहिए। उदाहरण के लिए ओरेकल के लिए कई कंपनियों के पास लाइसेंस हैं, लेकिन अब माईस्क्ल की तरफ झुक रहे हैं। – Liao

+2

स्विचिंग डेटाबेस की आवश्यकता है लागू करने के लिए एक महंगा अमूर्त है, और एक महंगा स्विच बनाने के लिए। यह उन अंतरिक्ष यात्री वास्तुकला आवश्यकताओं में से एक है कि, जब स्विच होता है, तब भी उतना ही खर्च होता है। अधिकांश परिदृश्यों के लिए, एक डेटाबेस में आर्किटेक्टिंग से बहुत बेहतर है। एक स्विच के लिए आवश्यकता होने पर, यह वैसे भी खर्च करेगा, और मैं तर्क दूंगा कि डेटाबेस अज्ञेय परिदृश्यों के लिए डिजाइनिंग से बहुत कम खर्च हो सकता है। यहां तक ​​कि एक ओआरएम ला ला निबर्ननेट का उपयोग करते हुए, एक में अभी भी असंगतता, असंगतता, परिवर्तनीय सॉर्टिंग इत्यादि होंगे। – SerialSeb

+2

"आपके एमवीसी ऐप को आपके डेटाबेस से डीकॉप्ल करने के लिए कितना संभव है, या उपयोगी है?" - मुझे नहीं पता कि क्यों हर दूसरे पोस्टर को सवाल पूछने वाले व्यक्ति को यह बताने की जरूरत है कि वे गलत हैं जब तक कि यह आपके मूल रूप से प्रश्न के पूर्व शर्त (जिसे वह रखता है) को अस्वीकार करने के अपने स्वयं के लगाए गए मॉडल को फिट करता है खुद सवाल करो! – Henrik

0

यह वास्तव में इस एमवीसी परियोजना के आकार पर निर्भर करता है। मैं कहूंगा कि यूआई और डोमेन को एक ही चल रहे माहौल में रखें यदि वेबसाइट का उपयोग छोटी संख्या में उपयोगकर्ताओं (< 5000) द्वारा किया जा रहा है।

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

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

मुझे आशा है कि इससे

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