2011-06-07 27 views
6

मैं सी # 2.0 के साथ एएसपी.NET का उपयोग कर रहा हूं। मैंने डेटाबेस के लिए कुछ ऑब्जेक्ट बनाए हैं और इनमें से प्रत्येक ऑब्जेक्ट में गुण हैं जिन्हें मूल रूप से कहा जा सकता है या उन्हें इसी तरह से बुलाया जाता है और उनमें से RESTful JSON API बनाते हैं।सर्वर साइड और क्लाइंट साइड विधि

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

वर्तमान में मैं सी # कोड है कि HTML करने के लिए प्रत्येक मॉड्यूल धर्मान्तरित से पूरी तरह से अलग से जावा स्क्रिप्ट कोड writting है, लेकिन विधि वस्तुतः एक ही है, बस एक अलग भाषा है। इस उदाहरण के समान।

सी # कोड

public override string GetHtml() 
{ 
    IJsonObjectCollection<Person> response = ((Village)page).People; 
    string html = "<div id=\"test\">"; 
    foreach (Person person in response) 
    { 
     html += "<div class=\"person\">"; 
     html += person.Name; 
     if(canEdit) html += "*"; 
     html += "</div>"; 
    } 
    return html + "</div>"; 
} 

जावा स्क्रिप्ट कोड

function getHtml() { 
    JsonRequest('/json/villages/1/people', function(response) { 
     var html = '<div id="test">'; 
     for (int i = 0; i < response.length; i++) 
     { 
      var person = response[i]; 
      html += '<div class="person">'; 
      html += person.name; 
      if(canEdit) html += '*'; 
      html += '</div>'; 
     } 
     return html + '</div>'; 
    }); 
} 

आप शायद देख सकते हैं, जहां मैं इस सवाल के साथ जा रहा हूँ। ऐसा करने का सबसे प्रभावी तरीका क्या होगा? मैं कुछ अलग विकल्पों की सोच रहा था -

1. प्रत्येक ModuleToHtmlMethod एक वर्ग है कि HTML में इस डेटा वस्तु मोड़ की विधि को परिभाषित करता है हो सकता है। मैंने इसका प्रयास किया, लेकिन मैंने रोका क्योंकि मैं बहुत जटिल हो रहा था।

2. अपनी खुद की स्क्रिप्टिंग भाषा लिखें जिसे सी # के रूप में व्याख्या किया जा सकता है लेकिन जावास्क्रिप्ट कोड में 'संकलित' भी किया जा सकता है।

3. बस सी # में बहुत कुछ लिख सकते हैं और अजाक्स का उपयोग बस सी #

4. से HTML सामग्री का अनुरोध करने के कोड अलग रखें और हर विधि दो बार लिखें।

मैं अंततः अन्य डेवलपर्स को इन 'मॉड्यूल' लिखने की अनुमति देना चाहता हूं, तो शायद विकल्प सबसे अच्छा विकल्प है?

उत्तर

1

मैं विकल्प 4 त्यागने के रूप में यह रखरखाव अधिक कठिन बना देगा और आप जावास्क्रिप्ट और सी # कोड से एक के माध्यम से सृजित HTML के बीच सिंक से बाहर हो सकती हैं। मैं विकल्प 2 को भी त्याग दूंगा क्योंकि इससे अन्य डेवलपर्स और शायद अनावश्यक के लिए कोड अधिक कठिन हो सकता है।

मैं निश्चित रूप से एक ही स्थान पर एचटीएमएल उत्पन्न होगा और शायद सी # मौजूदा समारोह का उपयोग करता है HTML स्निपेट वापस जाने के लिए RESTful HTML API बेनकाब। तो अपने जावास्क्रिप्ट से आप कॉल करेंगे:

function getHtml() { 
    MyHtmlRequest('/html/villages/1/people', function(response) { 
     var html = response.Text; 
     return html; 
    }); 
} 
+0

मुझे लगता है कि यह शायद जाने के लिए सबसे अच्छा तरीका है। यहां समस्या यह है कि अधिकांश कोड लूप में है (जो काफी बड़ा हो सकता है), इसलिए अधिकांश HTML को दोहराया जाएगा, जो नाटकीय रूप से प्रतिक्रिया आकार में वृद्धि करेगा। Gzip संपीड़न मुझे यहाँ मदद करेंगे? – Connell

+0

gzip का उपयोग करके आपको प्रतिक्रिया आकार के 50-70% दाढ़ी चाहिए, यह देखने के लिए आपका कॉल है कि यह स्वीकार्य है या नहीं। JSON RESTful API और HTML RESTful API का उपयोग करके आपको उसी प्रतिक्रिया के बीच बाइट्स में अंतर की गणना करनी चाहिए। यदि अंतर 50% से कम है, तो gzip निश्चित रूप से मार्कअप ओवरहेड को हल करेगा। –

+0

मुझे आपको यह बताने के लिए परीक्षण करने की आवश्यकता नहीं है कि इसे 50% से अधिक अतिरिक्त होने की आवश्यकता होगी। ऐसे लूप होते हैं जो आम तौर पर 10-20 बार गोल करते हैं, लेकिन डेटा के प्रकार के आधार पर 50 विषम तक बढ़ा सकते हैं। फिर एचटीएमएल कोड '

'+row.name+' Edit
'या इसी तरह के समान है। आमतौर पर अधिक एचटीएमएल, शायद एक डिलीट बटन। – Connell

1

कुछ सुझाव।

  • एक सामान्य GetHtml विधि है जो HTML को दर्शाती है। यह कठिन हो सकता है क्योंकि यूआई ऐसा कुछ नहीं है जो डेटा फ़ील्ड को आसानी से और समान रूप से मानचित्र करता है।
  • अपने 'मॉड्यूल' के एक मेटा वर्णन है, इस का उपयोग अपने सामान्य GetHtml तरीकों बनाने के लिए
  • अंत में try this: यह आप फिर उन्हें सी #

से कॉल कर सकते हैं, तो आप सिर्फ JavaScript पद्धतियों बनाने के लिए अनुमति देगा मैं दूसरे, मेटा विवरण विकल्प के लिए जाऊंगा क्योंकि यह मेरे डेटा परतों के लिए है। मैं मूल रूप से एक फ़ाइल है जो मेरे डोमेन मॉडल को परिभाषित करता है। मैं इसका उपयोग अपने सभी डेटा acccess pocos, nhibernate config files, आदि उत्पन्न करने के लिए करता हूं। उसके बाद मेरे पास मेटा डेटा फ़ाइल है जो इन ऑब्जेक्ट्स को जानकारी जोड़ती है, जैसे UI प्रतिपादन जानकारी और फ़ील्ड सत्यापन जानकारी।

Tnx

गुइडो

+0

आपके दूसरे विकल्प में, क्या आपका मतलब मानव पठनीय वर्णन है जो किसी को कई भाषाओं में सटीक कार्य लिखने की अनुमति देता है, या एक मशीन पठनीय वर्णन जिसे मेरे दूसरे विकल्प के समान तरीके से उपयोग किया जा सकता है? – Connell

+0

मेरा मतलब कोड जनरेटर है। तो आप 'विवरण फ़ाइल' को परिभाषित करते हैं और फिर आप अपने सभी getHtml विधियों को उत्पन्न करते हैं। तो मूल रूप से क्या हो रहा है यह है कि आप एक डीएसएल में अपने सभी मॉड्यूल का वर्णन करते हैं (एक्सएमएल या जेसन ठीक है, आप [टी 4] (http://msdn.microsoft.com/en-us/library/bb126445 पर देखना चाह सकते हैं। aspx))। तो हाँ, यह आपके विकल्प 2 की तरह है, लेकिन यह आपकी अपनी स्क्रिप्टिंग भाषा लिखने से कहीं अधिक सरल है। – gatapia

+0

हम्म .. मैं देख सकता हूं कि यह जावास्क्रिप्ट के साथ कैसे काम करता है। एक बार यह सी # कोड उत्पन्न हो जाने पर, क्या मैं बस कोड को सी # कोड में कॉपी करता हूं? या क्या इस परिभाषा को समझने या इसे संकलित करने का मेरा कुछ शानदार तरीका होगा? – Connell

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