2012-03-15 7 views
14

एक WPF और ASP.NET MVC एप्लिकेशन के बीच सबसे अधिक मॉडल और तर्क कोड साझा करने के लिए मैं किस आर्किटेक्चर और पैटर्न का उपयोग कर सकता हूं?एक डब्ल्यूपीएफ और एएसपी.नेट एमवीसी अनुप्रयोग के बीच सबसे अधिक कोड कैसे साझा करें?

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

जोड़ा गया: मैं अपनी प्रस्तुति को चलाते हुए अपने इकाई मॉडल से स्वतंत्र दृश्य मॉडल की अवधारणा की तरह ही शुरुआत कर रहा हूं। हालांकि इनमें से कुछ एनोटेशन एमवीसी के लिए विशिष्ट असेंबली में स्थित हैं, लेकिन प्रदान किए गए मेटाडेटा में से कोई भी वास्तव में वेब विशिष्ट नहीं है। मैं अपने एमवीसी व्यू मॉडलों का उपयोग करके डब्ल्यूपीएफ विचारों के लिए बाध्यकारी डेटा स्रोतों के रूप में जानना चाहता हूं। इस मोर्चे पर किसी भी सुझाव की सराहना की जाएगी।

+0

मैंने इसी तरह के प्रश्न पूछा [यहां] (https://stackoverflow.com/questions/44528570/should-viewmodel-deal- प्रत्यक्ष रूप से-with-dto-or-it-is-ok-to-have-intermediate-clientm)। क्या आप ViewModels का पुन: उपयोग करने में सफल रहे? – Tenek

उत्तर

6

मेरा व्यक्तिगत पसंदीदा विन्यास एक एडम के समान है राजा ने ऊपर सुझाव दिया लेकिन मैं वेब प्रोजेक्ट के हिस्से के रूप में तर्क डीएलएल रखना चाहता हूं। मैं CT Terminal नामक एक प्रोजेक्ट चलाता हूं जो इस पैटर्न का पालन करता है। My Terminal.Domain प्रोजेक्ट में सभी एप्लिकेशन तर्क शामिल हैं और केवल CommandResult ऑब्जेक्ट्स को गुणों के साथ देता है जो यूआई प्रोजेक्ट को बताए जाने के निर्देशों के रूप में कार्य करते हैं। यूआई पूरी तरह से गूंगा है और केवल डोमेन प्रोजेक्ट द्वारा जो बताया गया है उसे संसाधित करता है।

अब, एडम किंग के दृष्टिकोण के बाद मैं उस डोमेन डीएलएल को एक WPF ऐप में थप्पड़ मार दूंगा और उसके बाद यूआई को मेरे लौटे CommandResult ऑब्जेक्ट में निर्देशों का पालन करने के लिए कोड करूँगा। हालांकि, मैं एक अलग दृष्टिकोण पसंद करते हैं। मैंने जेएसओएन एपीआई का पर्दाफाश करने के लिए एमवीसी 3 यूआई लिखा था। इस एपीआई किसी भी आवेदन से उपभोग किया जा सकता है। JSON API सरल था क्योंकि यह मूल रूप से मेरे टर्मिनल के आसपास एक रैपर था। डोमेन प्रोजेक्ट CommandResult ऑब्जेक्ट। जेएसओएन लौटा एक ही मूल गुण होगा। इस तरह मैं डीएलएल की बजाय इस एपीआई का उपभोग करने के लिए डब्ल्यूपीएफ ऐप लिखूंगा। अब अगर मैं आंतरिक अनुप्रयोग तर्क में मामूली परिवर्तन करता हूं तो मैं बस वेब प्रोजेक्ट को लाइव सर्वर पर तैनात करता हूं। एपीआई का उपयोग कर सभी क्लाइंट स्वचालित रूप से यह नया तर्क प्राप्त करते हैं।

स्पष्ट रूप से यदि परिवर्तन किए जा रहे हैं तो एपीआई से वापस आने वाले गुणों को प्रभावित करते हैं, तो उसे नए क्लाइंट कोड की रिहाई की आवश्यकता होगी, लेकिन कम से कम आंतरिक तर्क के लिए आपको ऐसा नहीं करना पड़ेगा।

+1

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

+0

"सीटी टर्मिनल" लिंक अब और काम नहीं करता है। – Tenek

+0

क्षमा करें, मुझे यकीन नहीं है कि उस परियोजना के साथ क्या हुआ लेकिन अवधारणा को एक नए नोड.जेएस प्रोजेक्ट में डुप्लिकेट किया गया था जिसे [शॉटगन] कहा जाता है (https://github.com/chevex-archived/shotgun)। कक्षा पुस्तकालय के बजाय यह एक नोड मॉड्यूल है। – Chev

2

मुझे वास्तव में रॉकी लोत्का की किताबें, सॉफ़्टवेयर और वीडियो इस विषय पर बहुत उपयोगी पाए गए।

http://www.lhotka.net/

http://channel9.msdn.com/Events/Speakers/Rockford-Lhotka

http://www.amazon.com/Expert-C-2008-Business-Objects/dp/1430210192/ref=sr_1_2?s=books&ie=UTF8&qid=1331834548&sr=1-2

+3

क्या यहां पूछे गए प्रश्न पर विशेष रूप से लागू होता है? –

+0

रॉकी के मॉडल के लिए एक .NET लाइब्रेरी है और मॉडल को अच्छी तरह से काम करता है। मुझे लगता है कि इसके डिजाइन में, जैसा कि उनके वीडियो में बताया गया है, खुद को बहुत ही पुन: प्रयोज्य कोड में उधार देता है। उन्होंने डब्ल्यूपीएफ निर्भरता ऑब्जेक्ट संपत्ति मॉडल पर चर्चा की और अपनी पुस्तकालय में एक समान चीज लागू की। मुझे लगता है कि एमएसएमवीसी को लेने के लिए एक उपयोगी सुविधा है। – Brannon

+0

बस एक तरफ: लोत्का * पेशेवर वीबी 6 बिजनेस ऑब्जेक्ट्स * वह बाइबल था जिस पर मैंने एक स्वतंत्र डेवलपर के रूप में अपना करियर स्थापित किया था। – ProfK

3

सबसे व्यापक रूप से इस्तेमाल किया पैटर्न में से एक एक अलग DLL विधानसभा की इकाइयां होने जा करने के लिए है, तो यह संदर्भित होने लगता है: यहाँ उसकी सामग्री के लिए कुछ लिंक है अन्य सभी परियोजनाओं से।

MVC 3 सूट भंडार पैटर्न बहुत अच्छी तरह से है, जो पहले उदाहरण में लेने के लिए एक साफ मार्ग हो सकता है, और दोनों WPF और ASP.net के लिए काम करेंगे

1

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

आखिरकार एक बार जब आप इस अलगाव को प्राप्त कर लेंगे, तो आप यूआई ऑपरेशंस की स्वतंत्रता विकसित कर सकते हैं, और संबंधित यूआई में यूआई ऑपरेशंस की जिम्मेदारी छोड़ सकते हैं (उदाहरण के लिए जब आप xyz बटन पर क्लिक करते हैं)।

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

1

स्पष्ट से शुरू हो रहा है। एक अलग असेंबली में अपने व्यापार तर्क और डोमेन मॉडल को Encapsulate।

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

वेब फ्रंटएंड के लिए आप माइक्रोसॉफ्ट के स्टीव सैंडर्सन द्वारा लिखित http://knockoutjs.com/ के साथ काम करने के डब्ल्यूपीएफ (एमवीवीएम) के करीब पहुंच सकते हैं। ब्राउज़र के लिए इसका एमवीवीएम। अधिक जानकारी के लिए http://www.asp.net/mvc/mvc4 भी चेकआउट करें।

1

वेब एपीआई का उपयोग करें, दोनों WPF और वेब एप्लिकेशन को वेब एपीआई से सेवाओं का उपभोग करने दें। हो गया।

+0

मुझे यह दृष्टिकोण पसंद है, यह बहुत आसान और सुरुचिपूर्ण लगता है, लेकिन आप मुख्य डेटा मॉडल इकाइयों को WPF ऐप में कैसे साझा करते हैं, खासकर यदि आप डेटा एनोटेशन और विशेषताओं के साथ सत्यापन और क्रमबद्धता को लागू करना चाहते हैं? क्या मुझे विशेष रूप से प्रत्येक प्लेटफार्म के लिए मॉडल कक्षाओं को फिर से परिभाषित करना है? यह लगभग वेबएपीआई का उपयोग करने के पूरे लाभ को हराने के लिए प्रतीत होता है क्योंकि मुझे मॉडलों को सिंक में विभिन्न प्लेटफार्मों में रखना होगा ... – SelAromDotNet

1

क्या आपने Portable class libraries का उपयोग करने का प्रयास किया था। इसके साथ आप डेटा लेयर बना सकते हैं और एएसपी.नेट एमवीसी, डब्ल्यूपीएफ, विंडोज फोन, सिल्वरलाइट में इसका इस्तेमाल कर सकते हैं।

+0

क्या आप (या इसे पढ़ रहे किसी और को) पोर्टेबल क्लास लाइब्रेरीज़ का उपयोग करके विशेष रूप से चर्चा करने वाले किसी भी संसाधन को इंगित कर सकते हैं वेब और Win8/WinPhone/WPF दोनों को लक्षित करें? मुझे वेब से अन्य प्लेटफार्मों में फ़ीड करने के लिए वेबएपीआई का उपयोग करने के एनपीहरसन के सुझाव पसंद हैं, और मेरी टिप्पणियों पर भी अतिरिक्त अंतर्दृष्टि की सराहना करेंगे! बहुत धन्यवाद! – SelAromDotNet

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