दिलचस्प पोस्ट
एनीमेशन के साथ गतिविधि प्रारंभ करें स्थिरता इकाई गतिशील बदल रहा है – जेपीए Django सीएसआरएफ टोकन + Angularjs फ़्लोटिंग बिंदु समानता और सहनशीलता आर में हिस्टोग्राम को ओवरले सामान्य वक्र IPhone पर एक NSString के लिए एईएस एन्क्रिप्शन कैसे TensorFlow में एक Tensor वस्तु के मूल्य को मुद्रित करने के लिए? आप web.xml में अपने <web-app> टैग्स में रूट संदर्भ कैसे निर्दिष्ट करते हैं? मैं अतुल्यकालिक XMLHttpRequest के लिए कॉलबैक फ़ंक्शन का लाभ कैसे प्राप्त करूं? त्रुटि C2065: 'cout': अघोषित पहचानकर्ता दो तिथियों की तुलना कैसे करें? HTML5 डेटा विशेषता का उपयोग करते हुए सीएसएस मान एक स्ट्रिंग में एक अक्षर बदलें? एक विशिष्ट Google Chrome पृष्ठ / टैब के लिए एक कस्टम उपयोगकर्ता एजेंट को संबद्ध करें Matplotlib स्कैटर चार्ट (कोड, एल्गोरिथ्म, टिप्स) के लिए लेबल प्लेसमेंट में सुधार कैसे करें?

एएसपी.एन.टी. एमवीसी वेबसाइट की ओर से सेवा सेवा की नई सेवा

सर्विसस्टैक्स के उदाहरणों में मुझे एएसपी.नेट एमवीसी वेबसाइट को पहले एक ही एप्लीकेशन नहीं मिला और फिर सर्विसस्टैक्स सर्विस को दूसरा बनाया गया।

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

मान लें कि हमारे पास Product का एक मॉडल है जो एक दस्तावेज़ डीबी में कायम रहता है। मान लीजिए कि हमारे पास उत्पादव्यू मॉडेल का दृश्य मॉडेल है जो Product से मैप किया जाता है और MVC रेज़र व्यू / आंशिक दृश्य के भीतर प्रदर्शित होता है।

इसलिए यह चीजों का एक वेब साइड है .. अब हम मान लें कि हम विंडोज 8 के अनुप्रयोगों जैसे विभिन्न क्लाइंट जैसे सर्विस रिटर्निंग उत्पाद जोड़ना चाहते हैं।

क्या अनुरोध / उत्तरदायी कक्षाएं पूरी तरह से हमारे पहले से हैं से पूरी तरह से डिस्कनेक्ट होनी चाहिए? हमारे ProductViewModel पहले से वह सब कुछ हो सकता है जिसे हम सेवा से वापस करना चाहते हैं।

चूंकि हमारे पास पहले से ही Product (मॉडल वर्ग) है इसलिए हम एपीआई नेमस्पेस में एक और Product वर्ग नहीं बना सकते हैं। लेकिन हम यह कर सकते हैं लेकिन इससे चीजें स्पष्ट नहीं होती हैं और मैं इससे बचने के लिए चाहता हूं।

तो, क्या हमें एपीआई नेमस्पेस में स्टैंडअलोन ProductRequest क्लास और ProductRequestResponse (प्रोडक्टव्यूमॉडेल) को प्राप्त करना चाहिए?

ऐसा ProductRequestResponse : ProductViewModel तरह ProductRequestResponse : ProductViewModel ?

मैं क्या कह रहा हूं, हमारे पास पहले से मॉडल और व्यू मॉडल कक्षाएं हैं और एसएस सेवा के लिए अनुरोध और प्रतिक्रिया कक्षाओं का निर्माण करने के लिए हमें दूसरी दो फाइलें बनाने होंगे, जो कि हमारे पास पहले से मौजूद कक्षाओं से सब कुछ नकल कर लेते हैं। यह मेरे लिए सूखा नहीं लग रहा है, यह चिंताओं के दिशानिर्देशों के अलग होने का पालन कर सकता है लेकिन सूखी भी महत्वपूर्ण है, वास्तव में सब कुछ अलग करना (सब कुछ अलग करना कोड के दोहराव की ओर जाता है)।

मैं क्या देखना चाहूंगा वह एक ऐसा मामला है जहां एक वेब एप्लिकेशन पहले ही बना दिया गया है, इसमें वर्तमान में मॉडल और व्यू मॉडल शामिल हैं और वेब पर प्रदर्शित होने के लिए उचित दृश्य लौटाते हैं लेकिन प्रोग्रामैटिक ग्राहकों को समर्थन देने के लिए पूरी तरह कार्यात्मक सेवा में बढ़ाया जा सकता है? एजेएक्स क्लाइंट आदि की तरह … हमारे पास पहले से क्या है

एक और बात:

यदि आप इस उदाहरण https://github.com/ServiceStack/ServiceStack.Examples/blob/master/src/ServiceStack.MovieRest/MovieService.cs पर एक नज़र डालते हैं

आप देखेंगे कि Movie अनुरोध वर्ग और Movies अनुरोध वर्ग (एकल फिल्म अनुरोध के लिए एक है, फिल्मों की सूची के लिए दूसरा एक)। जैसे, दो सेवाएं भी हैं, MovieService और MoviesService , जो एक फिल्म के लिए अनुरोध करती है, फिल्मों की एक शैली के लिए दूसरा है।

अब, जब मैं एसएस सेवा के प्रति दृष्टिकोण पसंद करता हूं और मुझे लगता है कि यह सही है, मुझे अनुरोध के प्रकार की वजह से इस प्रकार की जुदाई को पसंद नहीं है। क्या होगा अगर मैं निर्देशक द्वारा फिल्में चाहता हूं? क्या मैं इसके लिए एक Director संपत्ति और एक और सेवा ( MoviesByDirector ) की एक और अनुरोध वर्ग की खोज MoviesByDirector ?

मुझे लगता है कि नमूनों को एक सेवा की ओर उन्मुख होना चाहिए फिल्मों से निपटने के लिए सब कुछ एक ही छत के नीचे होना चाहिए सर्विसस्टैक्स के साथ यह कैसे हासिल होता है?

 public class ProductsService : Service { private readonly IDocumentSession _session; private readonly ProductsHelperService _productsHelperService; private readonly ProductCategorizationHelperService _productCategorization; public class ProductRequest : IReturn<ProductRequestResponse> { public int Id { get; set; } } // Does this make sense? // Please note, we use ProductViewModel in our Views and it holds everything we'd want in service response also public class ProductRequestResponse : ProductViewModel { } public ProductRequestResponse GetProducts(ProductRequest request) { ProductRequestResponse response = null; if (request.Id >= 0) { var product = _session.Load<Product>(request.Id); response.InjectFrom(product); } return response; } } 

Solutions Collecting From Web of "एएसपी.एन.टी. एमवीसी वेबसाइट की ओर से सेवा सेवा की नई सेवा"

सेवा स्तर आपका सबसे महत्वपूर्ण अनुबंध है

सबसे महत्वपूर्ण इंटरफ़ेस जो कि आप अपने पूरे सिस्टम में कभी भी बना सकते हैं, आपके बाहरी अनुभव सेवा अनुबंध है, यही आपकी सेवा या अनुप्रयोग के उपभोक्ता से जुड़ी होगी, यानी मौजूदा कॉल-साइट जो आपके कोड के साथ अद्यतन नहीं होंगे -बेस – हर दूसरे मॉडल माध्यमिक है।

डीटीओ दूरस्थ सेवाओं के लिए सर्वोत्तम अभ्यास हैं

दूरस्थ सेवाओं ( एमएसडीएन ) के लिए डीटीओ (डेटा ट्रांसफर ऑब्जेक्ट्स) का उपयोग करने के लिए मार्टिन फोवेलर की सिफारिशों के अनुसरण में, सर्विस स्टैक्स एक सुस्पष्ट परिभाषित अनुबंध को परिभाषित करने के लिए स्वच्छ, अनजान पीओसीओ के उपयोग को प्रोत्साहित करता है जिसके साथ बड़े पैमाने पर कार्यान्वयन और निर्भरता-मुक्त हो। dll। इसके लाभ से आप अपने सी # /। NET क्लाइंट में अपनी सेवाओं को परिभाषित करने के लिए उपयोग किए गए टाइप किए गए डीटीओ को फिर से उपयोग करने में सक्षम हो सकते हैं – किसी भी कोड के उपयोग के बिना एंड-टू-एंड टाइप एपीआई प्रदान करते हैं- जनरल या अन्य कृत्रिम मशीनरी

शुष्क बनाम आशय

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

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

यह आधिकारिक स्रोत भी प्रदान करता है (जो आपके ऐप लॉजिक के अंदर लीक या युग्मित नहीं है) जो ऑटो-जनरेटेड मेटाडेटा पृष्ठ, उदाहरण के उत्तर, सफ़र समर्थन, एक्सएसडीएस, डब्लूएसडीएलएस, आदि बनाने में उपयोग किया जाता है।

सर्विस स्टैक के अंतर्निहित स्वत: मैपिंग का उपयोग करना

जब तक हम अलग डीटीओ मॉडलों को बनाए रखने के लिए प्रोत्साहित करते हैं, आपको स्वयं मैन्युअल मैपिंग बनाए रखने की आवश्यकता नहीं होती है क्योंकि आप ऑटोमैपर जैसे मैपर का उपयोग कर सकते हैं या सर्विस स्टैक के अंतर्निहित ऑटो मैपिंग समर्थन का उपयोग कर सकते हैं, उदाहरण के लिए:

एक नया डीटीओ उदाहरण बनाओ, जो व्यू मॉोडल पर मेल खाने वाले गुणों के साथ पॉपुलेटेड है:

 var dto = viewModel.ConvertTo<MyDto>(); 

डीटीओ आरंभ करें और इसे एक दृश्य मॉडल पर मिलान गुणों के साथ भरें:

 var dto = new MyDto { A = 1, B = 2 }.PopulateWith(viewModel); 

डीटीओ आरंभ करें और इसे एक मॉडल पर गैर-डिफ़ॉल्ट मिलान गुणों के साथ आबाद करें:

 var dto = new MyDto { A = 1, B = 2 }.PopulateWithNonDefaultValues(viewModel); 

डीटीओ को आरंभ करें और उस मिलान गुणों के साथ पॉप्युलेट करें, जो एक एट्रिब्यूशन मॉडल पर अट्र विशेषता के साथ एनोटेट किया गया है:

 var dto = new MyDto { A=1 }.PopulateFromPropertiesWithAttribute<Attr>(viewModel); 

मानचित्रण तर्क अधिक जटिल हो जाता है, तो हम कोड को बनाए रखने के लिए विस्तारित तरीकों का उपयोग करना पसंद करते हैं और मैपिंग एक ही जगह में बनाए रख सकते हैं जो आपकी ऐप्लिकेशन के भीतर से आसानी से उपभोग्य है, जैसे:

 public static class MappingExtensions { public static MyDto ToDto(this MyViewModel viewModel) { var dto = viewModel.ConvertTo<MyDto>(); dto.Items = viewModel.Items.ConvertAll(x => x.ToDto()); dto.CalculatedProperty = Calculate(viewModel.Seed); return dto; } } 

जो अब आसानी से आसानी से उपभोज्य है:

 var dto = viewModel.ToDto(); 

यदि आप विशेष रूप से सर्विसस्टैक्स से नहीं बंधे हैं और सिर्फ प्रोग्रामैटिक क्लाइंट को समर्थन देने के लिए "पूरी तरह से कार्यात्मक सेवा चाहते हैं …" तो आप निम्न में से प्रयास कर सकते हैं: आपके नियंत्रक अनुरोध पर स्वीकार JsonResult आधार पर या तो एक ViewResultViewResult या ViewResultJsonResult हेडर – Request.AcceptTypes.Contains("text/html") या Request.AcceptTypes.Contains("application/json")

दोनों ViewResult और JsonResult ActionResult , इसलिए कार्यों के हस्ताक्षर एक समान है, और दोनों View() और Json() एक ViewModel स्वीकार करते हैं। इसके अलावा, यदि आपके पास एक नियंत्रकबेस है तो आप एक आधार विधि बना सकते हैं (उदाहरण के लिए protected ActionResult RespondWith(Object viewModel) ) जो कि कॉल (या तो) या protected ActionResult RespondWith(Object viewModel) ) को कॉल करता है ताकि मौजूदा कोड में परिवर्तन न्यूनतम हो।

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

एल.पी.