जहाँ तक ASP.NET/MVC और WCF दोनों का लाभ उठाने वाले एक अनुप्रयोग को लिखना है, यह महान नहीं है। वेबएपीआई ने मामलों में सुधार किया हो सकता है, लेकिन एक परियोजना में मैं परिचित हूं जो एक ही ऐप में डब्ल्यूसीएफ और एमवीसी का उपयोग कर रहा था, उन्होंने समान अवधारणाओं का प्रतिनिधित्व करने के लिए मॉडल के दो अलग-अलग सेटों को बनाए रखा - एक डब्ल्यूसीएफ कोड के लिए और एक एमवीसी के लिए। कोड। आप कल्पना कर सकते हैं कि उन सभी मैपरों के लिए जो उन्हें दो मॉडलों के बीच चीजों का अनुवाद करने के लिए लिखना था - कोड की बहुत सारी पंक्तियाँ थीं जिन्हें टाला जा सकता था / जिनसे बचना चाहिए था।
ऐसा क्यों हुआ इसका एक हिस्सा यह है कि WCF अनुरोध और प्रतिक्रिया ऑब्जेक्ट को [DataContract] और [DataMember] के साथ उनकी संपत्तियों के साथ एनोटेट किया जाना चाहिए, जबकि MVC को इसकी आवश्यकता नहीं है। दूसरी ओर मुहावरेदार एमवीसी ViewModels चाहते हैं, जिसमें WCF DataContracts की तुलना में अलग-अलग लक्ष्य हैं। बेशक, यह संभव है कि डोमेन ऑब्जेक्ट्स के दो पूर्ण सेटों का उपयोग डब्ल्यूसीएफ और एमवीसी परस्पर विरोधी की तुलना में कॉनवे के कानून के साथ अधिक था , लेकिन यह इंगित करने योग्य है कि डब्ल्यूसीएफ और एमवीसी के आउटपुट और इनपुट के रूप में अलग-अलग लक्ष्य और आवश्यकताएं हैं।
निजी तौर पर, मैं एक साधारण लेकिन शक्तिशाली सेवाओं को विकसित करने के लिए आंशिक रूप से बैक-एंड एपीआई उन्मुख हूं, खासकर जब आप कई क्लाइंट्स चाहते हैं। मुझे लगता है कि उत्कृष्ट जावास्क्रिप्ट MVVM और माइक्रो-एमवीसी फ्रेमवर्क का आगमन इसे एक स्वाभाविक विकल्प बनाता है, क्योंकि BackboneJS , KnockoutJS और अन्य का उपयोग करके एप्लिकेशन कोड लिखना एक सक्षम विकास वातावरण की अनुमति देता है। फिर आप अपने वेब ऐप, या मोबाइल क्लाइंट पर बनाने के लिए अपनी पसंद के माइक्रो एमवीसी में बैक एंड का उपभोग कर सकते हैं, और आपके पार्टनर दूरस्थ रूप से समान एपीआई का उपभोग कर सकते हैं।
सुझाव
या तो WebAPI या सर्विस स्टैक आपके बैक एंड एपीआई के निर्माण के लिए अच्छे उम्मीदवार हो सकते हैं। मैं सेवा स्टैक की सलाह देता हूं, जैसा कि मैं पिछले कुछ महीनों से इसका उपयोग कर रहा हूं और पाया है कि यह डब्ल्यूसीएफ के लिए एक उत्कृष्ट प्रतिस्थापन है। मैं वर्तमान में अपने ब्लॉग पर सर्विस स्टैक पर एक ट्यूटोरियल श्रृंखला लिख रहा हूं ।
सर्विस स्टैक का रखरखाव करने वाले समूह ने एक उदाहरण एप्लिकेशन को एक स्टैकऑवरफ्लो को क्लोन की तरह विकसित करने के लिए फ्रेमवर्क का उपयोग करके पोस्ट किया है जो एक विकास पैटर्न दिखाता है जो मुझे लगता है कि विशेष रूप से सम्मोहक है। इसमें एक सरल, मॉडल आधारित सेवाओं का अंत शामिल है जिसकी कल्पना आप एमवीसी वेबसाइट, एक मोबाइल ऐप या केवल कुछ भी आसानी से कर सकते हैं। ServiceStack के डिज़ाइन लक्ष्य स्पष्ट रूप से एक पैटर्न को प्रोत्साहित करते हैं जिससे क्लाइंट और सर्वर के बीच कम युग्मन पैदा हो। विचार यह है कि चैट एपीआई की कॉल से बचें, जैसे GetCustomersInRegionWithSearchTerm(int regionId, string searchTerm)
कि कम तरीकों के पक्ष में। आप सेवा स्टैक में इसी तरह लागू कर सकते हैं:
[Route("/customers", "GET"]
[Route("/customers/search/{SearchTerm}", "GET"]
[Route("/customers/region/{Region}", "GET"]
[Route("/customers/region/{Region}/search/{SearchTerm}", "GET"]
public class Customers
{
public int? RegionId { get; set; }
public string SearchTerm { get; set; }
}
public class CustomersService : Service
{
public object Get(Customers request) {
// handle request
return new CustomersResponse();
}
}
लाभ, मेरी आँखों को, कि बजाय बहुत सारे और अलग तरीकों की बहुत सारी के ऊपर अपने व्यापार तर्क प्रसार होने के है GetCustomersInRegionWithSearchTerm(int regionId, string searchTerm)
, GetCustomersInRegion(int regionId)
, GetCustomersWithSearchTerm(string searchTerm)
, GetCustomers()
, यह सब एक ही स्थान पर है। इससे अधिक रखरखाव योग्य कोड होना चाहिए।
संयोग से, स्टैक एक्सचेंज ने मूल सेवा स्टैक लेखक को काम पर रखा था । वह सेवा ढेर परियोजना के लिए सक्रिय रूप से प्रतिबद्ध है ।
मैं विशेष रूप से कुछ चीजों के लिए संदेश कतारों का शौकीन हूं - और जबकि डब्ल्यूसीएफ इसके लिए अनुमति देता है, वेबएपीआई नहीं करता है। ServiceStack MQ के माध्यम से एक ही वेब सेवा को लागू करने की अनुमति देता है। इस बारे में अधिक जानकारी के लिए Redis MQ होस्ट देखें: github.com/ServiceStack/ServiceStack/wiki/Messaging-and-redis