2010-11-30 17 views
16

इससे पहले कि आप इसका जिक्र करें, मुझे पता है कि इस सवाल से पहले पूछा गया है लेकिन डब्ल्यूसीएफ 4 के लॉन्च के बाद से नहीं!आज .NET में एक विश्वसनीय वास्तुकला को लागू करने का सबसे अच्छा तरीका क्या है?

तो, बहुत सारे पढ़ने के बाद मैंने फैसला किया है कि एक विश्वसनीय वास्तुकला एपीआई प्रदान करने वाला डेटा शुरू करने का तरीका है। रिलीज डब्ल्यूसीएफ 4, एएसपी.नेट एमवीसी 2 और डब्ल्यूसीएफ आरईएसटी स्टार्टर किट को ध्यान में रखते हुए, अब एक शानदार वास्तुकला को लागू करने का सबसे अच्छा तरीका क्या है?

मी: मैं एएसपी.नेट एमवीसी से बहुत परिचित हूं इसलिए मैं वहां काफी आरामदायक महसूस करता हूं। डब्ल्यूसीएफ के बारे में मेरा ज्ञान, हालांकि, कमी है।

तो डब्ल्यूसीएफ 4 या एएसपी.नेट एमवीसी? (या कुछ और wcf बाकी स्टार्टर किट की तरह)? विशेष रूप से मैं तलाश कर रहा हूँ: कार्यान्वयन

  • की

    • आसानी मैं ASP.NET MVC, नहीं WCF पता है। डब्ल्यूसीएफ सीखने की अवस्था के लायक है?
    • आरईएसटी के लिए डब्ल्यूसीएफ 4 ओवरकिल है या एएसपी.नेट एमवीसी कुछ बिंदु पर कम हो जाएगा?
  • +1

    प्रश्न का उत्तर देने के लिए पर्याप्त जानकारी नहीं है। पहले से ही जवाब देखें। उनके पास कोई पदार्थ नहीं है और सिर्फ "इसका उपयोग करें क्योंकि मेरे पास है"। इन सवालों के जवाब देने का एकमात्र तरीका आपकी सटीक आवश्यकताओं के साथ सुविधाओं की तुलना करना है। चूंकि आपने "कम बैंडविड्थ" के अलावा कुछ भी प्रदान नहीं किया है, जिसमें अंतर्निहित ढांचे और "कई क्लाइंट" के साथ कुछ भी नहीं है, जो आरईएसटी की बहुत परिभाषा है, आपको कोई ठोस सलाह देने के लिए लगभग असंभव है। – jfar

    +0

    @Alex:/प्रश्न के अजीब व्याख्या पर विचार करते हुए कि वह "सर्वश्रेष्ठ" और उद्धरण "डब्ल्यूसीएफ 4, एएसपी.नेट एमवीसी 2 और डब्ल्यूसीएफ आरईएसटी" – jfar

    +0

    @ एलेक्स धन्यवाद के लिए पूछ रहा है। @jfar मैंने इसे आपके लिए अधिक विशिष्ट बनाने की कोशिश की है। मैं सिर्फ किसी को यह बताने के लिए चाहता हूं कि क्या उन्होंने किसी भी मार्ग पर लंबे समय से लड़ाई लड़ी है और पाया है कि यह सही है या – BritishDeveloper

    उत्तर

    20

    मैंने वास्तव में कार्यान्वित किया है या वर्तमान में सभी 3 पोस्ट विकल्पों का उपयोग कर रहा हूं, इसलिए मैं अपना ले जाऊंगा। अब जब आपने स्पष्ट किया है कि आप थोड़ा सा जवाब देने के लिए क्या चाहते हैं।

    1. आप दोनों सर्वर और ग्राहक हैं:

      OData

      OData आंतरिक अनुप्रयोगों के लिए महान है।

    2. आप इकाई फ्रेमवर्क का उपयोग कर रहे हैं।
    3. आप अपने मॉडल में विरासत का उपयोग नहीं करते हैं और उप-संग्रह पूछने की अपेक्षा नहीं कर रहे हैं।

    ओडाटा अद्भुत है क्योंकि आप क्लाइंट पक्ष पर IQueryable का उपयोग कर सकते हैं। हालांकि कुछ सीमाओं के साथ आता है। मेरे सिर के शीर्ष से दो में शामिल हैं कि आप विरासत वाले मॉडल के साथ काम करना थोड़ा अजीब है और आप can't do nested collections हैं।

    वहाँ भी वास्तव में क्या supported LINQ capabilities are नहीं जानते हुए भी साथ एक मुद्दा है।

    मैं OData की सलाह देते हैं आप पूरी तरह एक सेवा परत की जरूरत है और केवल उन लोगों के साथ सरल CRUD संचालन करने की उम्मीद है। प्रत्येक ओडाटा समस्या के साथ मुख्य समस्या के परिणामस्वरूप एक कठिन दीवार होती है जिसे आप कभी-कभी नहीं मिल सकते हैं। क्लाइंट उपभोक्ता कोड वास्तव में सबसे अच्छा हिस्सा है और यदि आप इसका उपयोग करने के लिए सी # का उपयोग नहीं कर रहे हैं तो इसका संभवतः इसके लायक नहीं है।

    EFS ऑटो मेटाडाटा का उपयोग किए बिना

    भी समर्थन आप एक स्कीमा अपने उपभोक्ताओं या के खिलाफ लेखन का आनंद नहीं हो सकता है के अनुरूप कोड का सिर्फ एक ही राशि लिख दिया जाएगा। जबकि ओडाटा के लिए एक रेल रैपर है, यह सब अपेक्षाकृत नया है। मैं वास्तव में बड़े एमएस भागीदारों के अलावा जंगली में ओडाटा नहीं देखता हूं।

    ओडाटा प्रमाणीकरण और फ़िल्टरिंग भी बहुत नंगे हड्डियों एटीएम है। यदि आपको डेटा सीमित करने की आवश्यकता है तो आप अपने आप से बहुत से अनुमति संबंधित कोड लिखेंगे। यदि आप कभी भी अनुमति से सीमित होने के लिए तालिका से चयन करना चाहते हैं तो कुछ अजीब कोड लिखने के लिए तैयार रहें।

    MVC 2

    MVC एक RESTful सेवा बनाने के लिए बहुत अच्छा है। आपके पास क्रिया समर्थन है और return JSONResult जितना आसान हो सकता है। एकमात्र संभावित नकारात्मकता आपके कोडिंग को स्वयं को संभालने में बहुत सारी त्रुटि है और आपके सभी दृश्य मॉडल को बेस क्लास से प्राप्त होना चाहिए जो स्टेटस कोड और त्रुटि संदेश दिखाता है।

    तुम भी एक छोटे से आप अपने संदेश होने के लिए उत्तर कैसे फैंसी या सम्मेलन संचालित चाहते हैं पर निर्भर करता है दृश्य इंजन tweak कर सकते हैं। एमवीसी के लिए बड़ा लाभ यह बहुत एक्स्टेंसिबल है और आप जो भी चाहें कर सकते हैं। मैं एक ही नियंत्रक कार्रवाई में रूपों/AJAX कॉल/और बाकी सेवाओं के संयोजन में बड़ा हूँ। एक बार लागू करें, एक ही ऑपरेशन के तीन स्वाद प्राप्त करें। एमवीसी को कम करना मुश्किल होगा क्योंकि आपको लगभग हर चीज करने के लिए मोड़ दिया जा सकता है।

    एक MVC सेवा करने के लिए एक बड़ा लाभ यह है कि एक आवेदन है कि सेवा के साथ तैनात किया जाता है में एक छोटे से व्यवस्थापक यूआई चुपके कर सकते हैं। दो साइटों को तैनात करने के लिए बहुत आसान है।

    WCF बाकी

    तो मैं केवल एक बहुत ही सीमित क्षमता में WCF बाकी उपयोग कर रहा हूँ और ऐसा लगता ... ठीक है ... मैं 3 साल के लिए WCF का उपयोग किया है और मैं हमेशा से संतुष्ट नहीं हूं इसे विस्तारित करना कितना निराशाजनक जटिल है। ओडीएटीए की तरह आप सील किए गए वर्गों और कार्यक्षमता के अवांछित गुफाओं में भाग लेंगे यदि आप पीटा पथ से बाहर निकलते हैं। यह एमवीसी की एक्स्टेंसिबिलिटी की मात्रा के विपरीत है।

    दूसरी समस्या डब्लूसीएफ के शीर्ष पर आपकी इमारत है और इसके साथ चलने वाली सभी पागलपन है। मैंने हमेशा कहा है कि इसे प्रभावी ढंग से डब्ल्यूसीएफ का उपयोग करने के लिए पीएचडी की आवश्यकता है। रिक स्ट्राल के पास pain points of WCF REST के बारे में एक अच्छा लेख था। सुनिश्चित नहीं है कि चीजें बदली हैं लेकिन इसके पढ़ने के लायक हैं।

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

    मुख्य अंक

    1. आप अपने उपभोक्ताओं को नहीं जानते हैं तो मुझे लगता है जिसे आप अपने एपीआई पता नहीं है। एक सेवा का निर्माण न करें जब तक कि आपके पास उपयोग केस न हो और उसके खिलाफ कोड हो।

    2. एमवीसी सबसे अधिक एक्स्टेंसिबल है और यदि आप परिचित हैं कि कवर के तहत चीजें कैसे काम करती हैं तो आप शायद ओडीटा और डब्ल्यूसीएफ जैसी एमएस चीज को बढ़ाने के लिए कड़ी मेहनत करने से बेहतर हो जाएंगे।

    3. फेसबुक, अमेज़ॅन, पेपैल, eBay जैसे सभी "बड़े लड़कों" में ऐसे एपीआई हैं जो वास्तव में किसी भी ज्ञात पैटर्न या स्कीमा के अनुरूप ओडाटा के अनुरूप नहीं हैं। आपकी आरईएसटी सेवा वास्तव में आप इसे बनाते हैं। यह # 1 से संबंधित है। उपभोक्ता के लिए पहले काम करना आसान बनाने पर ध्यान केंद्रित करें।

    +0

    आपको केवल "मुख्य बिंदु # 1" के लिए एक उपरोक्त मिलता है :-) बहुत से लोग एपीआई को इस विचार के आधार पर आज़माकर डिजाइन करते हैं कि वे डेटा को उजागर कर रहे हैं और यह समझने की कोई आवश्यकता नहीं है कि इसका उपयोग कैसे किया जाएगा। –

    +0

    महान उत्तर धन्यवाद। पुन: # 1 वेब साइट डेटा सेवाएं सभी एएसपीएनटी एमवीसी वेबसाइट के माध्यम से लिखी और वितरित की जाती हैं। बस एक नई आवश्यकता है "हमें एक आईफोन ऐप के लिए एपीआई और भविष्य में अन्य सामान की आवश्यकता है।" मुझे इस क्षेत्र के बारे में बहुत कुछ पता है इसलिए मदद के लिए धन्यवाद! – BritishDeveloper

    +0

    +1 jfar - वास्तव में वहां अच्छा सारांश है। मैंने इस कार्य के लिए wcf (http) और mvc दोनों का उपयोग किया है। मुझे प्रमाणीकरण पसंद है जो डब्ल्यूसीएफ में इतना आसान है, जबकि एमवीसी में बहुत अधिक दर्द होता है। अगर यह एक एमवीसी-आराम कार्यान्वयन में हल किया गया था जो प्रमाणीकरण की देखभाल करता था, तो मुझे लगता है कि यह हमारी सभी आरामदायक सेवाओं के लिए पसंद का मेरा मंच होगा। जैसा कि है, हम अभी भी आवश्यकताएं हैं जो इस समय केवल wcf (सुरक्षा के अनुसार) पूरा कर सकते हैं। –

    1

    मैंने विजुअल स्टूडियो एक्सटेंशन मैनेजर में बहुत सफलता के साथ उपलब्ध डब्ल्यूसीएफ रेस्ट सर्विस एप्लिकेशन टेम्पलेट का उपयोग किया है। यदि आप तेजी से शुरू करना चाहते हैं तो वह जगह है जहां मैं जाऊंगा।

    1

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

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

    7

    कोई निर्णय लेने से पहले, जागरूक रहें कि डब्ल्यूसीएफ में HTTP/आरईएसटी समर्थन महत्वपूर्ण रूप से बदलने की प्रक्रिया में है। http://wcf.codeplex.com/ देखें। पिछली संगतता की एक बड़ी मात्रा होगी लेकिन नई पुस्तकालय HTTP और डब्ल्यूसीएफ के परिप्रेक्ष्य से एक पूर्ण पुनः लिखना है।

    यह भी ध्यान रखें कि ओडाटा, हालांकि अनुप्रयोगों के एक विशिष्ट सबसेट के लिए उपयोगी है, एक सामान्य उद्देश्य आरईएसटी ढांचा नहीं है।

    अगर आपको कुछ .NET की आवश्यकता है, और आप वास्तव में आरईएसटी सही करना चाहते हैं, तो OpenRasta देखें। यदि आप केवल आरईएसटी करना चाहते हैं क्योंकि इसमें अच्छी मार्केटिंग buzz है तो एएसपी.नेट एमवीसी शायद आपके लिए पर्याप्त होगा। यदि आप केवल प्रयोगात्मक चरणों में हैं तो मैं नई डब्ल्यूसीएफ पुस्तकालयों को देखना जारी रखूंगा।

    12

    आपको OpenRasta देखें। यह एक संसाधन-केंद्रित ढांचा है जिसे स्पष्ट रूप से .NET में रीस्टफुल आर्किटेक्चर को कार्यान्वित करने के लिए डिज़ाइन किया गया है, और HTTP सामग्री वार्तालाप और पाचन प्रमाणीकरण जैसी चीजों के लिए मजबूत समर्थन प्रदान करता है।

    ओपनरास्टा का दृष्टिकोण यह है कि क्रियाओं (क्रियाओं) के संदर्भ में आपके एपीआई को लागू करने के बजाय, आपके एपीआई को संसाधनों के संदर्भ में परिभाषित किया जाना चाहिए (जो आम तौर पर आपके एपीआई इकाई मॉडल पर बारीकी से नक्शा रखेगा) और कोडेक्स, जो decoupled serialization/एक्सएमएल, जेएसओएन, एचटीएमएल या किसी अन्य सामग्री प्रारूप के रूप में उन संसाधनों का प्रतिनिधित्व जो आपके एपीआई को समर्थन देने की आवश्यकता है।

    यह ओपन स्रोत है, जिसे पूरी तरह से .NET में लिखा गया है, इसमें आईओसी और निर्भरता इंजेक्शन के लिए अंतर्निहित समर्थन शामिल है (इस तरह यह बहुत से आंतरिक रूप से एक साथ वायर्ड किया गया है), और एमआईटी लाइसेंस के तहत वितरित किया गया है।

    संस्करण 2.0 थोड़ी देर के लिए स्थिर रहा है, और कई स्थानों पर उत्पादन में उपयोग किया जा रहा है - सबसे विशेष रूप से Huddle

    मेरी राय में, ओपनरास्टा के संसाधनों पर मजबूत ध्यान देने का मतलब है कि यह डब्ल्यूसीएफ और एएसपी.नेट एमवीसी समेत "बहुउद्देश्यीय" वेब/HTTP ढांचे की तुलना में रीस्टफुल आर्किटेक्चर के लिए रॉय फील्डिंग की मूल दृष्टि के करीब है।

    +1

    मेरा अनुभव यह है कि संस्थाओं को संसाधन मैप करना एक बुरा विचार है। मुझे व्यूमोडल्स या डीटीओ जैसे संसाधनों का इलाज करने में बहुत अधिक सफलता मिली है। –

    +0

    आह - "डोमेन मॉडल" के विपरीत "एपीआई इकाई मॉडल" का अर्थ यही है ... आप बिल्कुल सही हैं, मैंने इसे बहुत अच्छी तरह से समझाया नहीं है। –

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