2010-01-21 21 views
5

मैं एक एएसपी.NET वेब एप्लिकेशन पर काम कर रहा हूं जो क्लाइंट पक्ष पर बहुत सारी जावास्क्रिप्ट का उपयोग करता है ताकि उपयोगकर्ता को सूचियों की ड्रैग-ड्रॉप रीडरिंग जैसी चीज़ें करने की अनुमति मिल सके, आइटम ढूंढ रहे हों सूची में आइटम जोड़ने के लिए (जैसे Google खोज बार में सुझाव),जावास्क्रिप्ट और सी # ऑब्जेक्ट मॉडल के बीच सुसंगतता बनाए रखना

मेरे पास एक जावास्क्रिप्ट "क्लास" है जिसका उपयोग मैं क्लाइंट साइड पर प्रत्येक सूची आइटम को स्टोर करने के लिए करता हूं अच्छी तरह से जानकारी के बारे में जानकारी के रूप में उपयोगकर्ता ने आइटम पर क्या कार्रवाई की है (जोड़ें, संपादित करें, हटाएं, स्थानांतरित करें)। पृष्ठ पर सर्वर को पोस्ट करने का एकमात्र समय होता है जब उपयोगकर्ता किया जाता है, पृष्ठ सबमिट होने से ठीक पहले मैं JSON में किए गए परिवर्तनों के बारे में सारी जानकारी को क्रमबद्ध करता हूं और इसे पृष्ठ पर छिपे हुए फ़ील्ड में संग्रहीत करता हूं।

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

यह एक संक्षिप्त प्रश्न है। मैं सिर्फ कुछ मार्गदर्शन फॉर्म ढूंढ रहा हूं जिन्होंने मेलिंग क्लाइंट और सर्वर साइड ऑब्जेक्ट मॉडल को बनाए रखने के मामले में समान चीजें की हैं।

उत्तर

1

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

विवरण जावास्क्रिप्ट स्रोत फ़ाइल हो सकता है; आप एक पार्सर बना सकते हैं जो उस जेएस से अनुचित सी # कोड उत्पन्न करता है। या, यह एक सी # स्रोत फ़ाइल हो सकती है, और आप बातचीत करते हैं।

आपको RelaxNG में इसका वर्णन करने में और अधिक उपयोगिता मिल सकती है, और फिर सी # और जावास्क्रिप्ट दोनों के लिए जेनरेटर बनाना (या ढूंढना)। इस मामले में RelaxNG स्कीमा को स्रोत कोड नियंत्रण में चेक किया जाएगा, और जेनरेट की गई कलाकृतियों का नहीं होगा।


संपादित: इसके अलावा वहाँ एक नवजात कल्पना WADL कहा जाता है, जो मैं भी इस संबंध में मदद मिलेगी लगता है। मैंने WADL का मूल्यांकन नहीं किया है। परिधीय रूप से, मुझे पता है कि इसने तूफान से दुनिया नहीं ली है, लेकिन मुझे नहीं पता कि ऐसा क्यों है। There's a question on SO regarding that


EDIT2: को देखते हुए उपकरणों की कमी (WADL जाहिरा तौर पर stillborn है), अगर मैं तुम थे मैं इस सामरिक दृष्टिकोण की कोशिश कर सकते:

  • अपने ग # प्रकार पर [DataContract] विशेषताओं का प्रयोग करें और इलाज निश्चित के रूप में वे।
  • एक संकलित असेंबली से आपके सी # प्रकार में फिसलने वाला टूल बनाएं और नमूना एक्सएमएल जेएसओएन दस्तावेज़ पर जेसनएसरियललाइज़र का उपयोग करके, प्रकार को तत्काल चालू करता है, जो कि "ऑब्जेक्ट मॉडल परिभाषा" का एक प्रकार प्रदान करता है। टूल को किसी भी तरह से सत्यापित करना चाहिए कि तत्काल प्रकार समकक्ष जेएसओएन में राउंड-ट्रिप कर सकता है, शायद परिणामी सामग्री पर चेकसम या सीआरसी के साथ।
  • अपनी बिल्ड प्रक्रिया के हिस्से के रूप में उस उपकरण को चलाएं।

ऐसा करने के लिए, आपको लगता है कि स्रोत कोड में "नमूना JSON दस्तावेज़" में जाँच करने के लिए होगा और आप यह भी सुनिश्चित कि प्रपत्र आप विभिन्न जे एस कोड में उपयोग कर रहे थे है बनाने के लिए होगा आपके ऐप में चूंकि जावास्क्रिप्ट गतिशील है, इसलिए आपको एक प्रकार सत्यापनकर्ता या कुछ भी चाहिए, जो जेस्लिंट या कुछ अन्य बिल्ड-टाइम सत्यापन चरण के हिस्से के रूप में चलाएगा, जो आपके जावास्क्रिप्ट स्रोत को जांचने के लिए जांच करेगा कि यह आपके "मानक" objbect मॉडल परिभाषाओं का उपयोग कर रहा है ।

+0

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

+0

या, मैंने प्रोटोबफ के बारे में भी सोचा। मुझे आश्चर्य है कि एक प्रोटोबफ से उत्पन्न जेनरेट कोड .idl protobufs serializer के बिना प्रयोग योग्य है। यदि ऐसा है, तो आप .NET में JsonSerializer का उपयोग कर सकते हैं, सी # कोड के साथ जो protobufs उपकरण उत्पन्न करता है। – Cheeso

+0

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