2011-01-29 8 views
7

मैं ASP.NET अनुप्रयोगों और डेटाबेस-अमूर्त-परतें, फिर से लिखने के प्रयोजनों के लिए की संरचना के बारे महीनों में कुछ सवाल पोस्ट किया है MVC3/इकाई-कोड-प्रथम के लिए आवेदन (नए सिरे से लिखना ग्राउंड-अप), एक विरासत वेब एप्लिकेशन। मैं हाल ही में पर MVC3/इकाई-कोड-प्रथम और इसके साथ कुछ समय बिताने के बाद ठोकर खाई है, यह कैसे काम करता है, कैसे चीजें बाहर निकाला जाता है के साथ प्यार में गिर गए हैं, और मैं किसी भी बहाना इसका इस्तेमाल करने के लिए देख रहा हूँ!एक विरासत मालिकाना वेब से

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

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

  • विरासत एप्लिकेशन डेटा को कॉम्बो-बक्से बाध्य करने के लिए, और गतिशील रूप से किसी अन्य रूप में चयन के आधार पर निर्भर कॉम्बो-बक्से फिर से आबाद कस्टम नियंत्रण (यह उनमें से खुद फार्म) का उपयोग करता है। एएसपी.नेट में, इस प्रश्न का उत्तर आसानी से दिया जाता है क्योंकि एक पृष्ठ पर asp:DataList नियंत्रण फेंकता है, इसे डेटा स्रोत और वॉयला से जोड़ता है। थोड़ा सा सरल कोड आपको चयनित मूल्य पर अन्य कॉम्बो बॉक्स फ़िल्टर करने की अनुमति देता है। यह एएसपी.नेट में भी एक और डेटा-सूची लागू करने के लिए आसान होगा, जो कि इस फैशन में स्वचालित निर्भर डेटा भी है (जो लीगेसी ऐप के व्यवहार की नकल की नकल करेगा)। मुझे एमवीसी में कस्टम कंट्रोल की धारणा नहीं मिल रही है, हालांकि मुझे लगता है कि इस तरह की चीजें jQuery कॉल द्वारा डेटा प्राप्त करने और इसे कॉम्बो बॉक्स में फेंकने के लिए संभाली जाती हैं। लेकिन क्या यह हर पृष्ठ पर प्रत्येक कॉम्बो-बॉक्स के लिए किया जाता है जिसमें एक है? क्या यह उचित मानकों के साथ आंशिक विचारों का मामला पारित किया जा रहा है, या यह सिर्फ बेवकूफ है?

  • मैं इस MVC से इकाई की रूपरेखा के लिए अधिक से संबंधित है, लेकिन उदाहरण मैं वेब पर मिल गया है, और ट्यूटोरियल के अधिकांश, LINQ प्रश्न करने होंगे वस्तुओं का संग्रह, इस उदाहरण के लिए वापस जाने के लिए प्रदर्शित करने के लिए से, लगता है MvcMovie उदाहरण:

    public ActionResult Index() 
    { 
        var movies = from m in db.Movies 
           where m.ReleaseDate > new DateTime(1984, 6, 1) 
           select m; 
    
        return View(movies.ToList()); 
    } 
    

    कौन सा तो ध्यान में रखते हुए एक @foreach पाश का उपयोग कर गाया है। यह सब अच्छा है। विरासत एप्लिकेशन में एक एकल ब्राउज़ पृष्ठ होता है जिसका उपयोग सिस्टम के अन्य सभी क्षेत्रों द्वारा किया जाता है (50 से अधिक हैं)। यह स्तंभ क्रम लॉग ऑन उपयोगकर्ता के लिए परिभाषित किया निरीक्षण किसी भी विदेशी कुंजी सपाट (ताकि के रूप में गैर उपयोगकर्ता के अनुकूल प्राथमिक कुंजी मूल्य के लिए विरोध विदेशी मेज पर क्षेत्र प्रदर्शित किया जाता है) से करता है और यह भी लागू करने के लिए अनुमति देता है किसी भी कॉलम के लिए कस्टम फिल्टर। यह उन टेबलों के लिए भी करता है जिनमें 100k पंक्तियां हैं। एंटिटी-फ्रेमवर्क और विचारों का उपयोग करके कुछ कैसे लिखने के बारे में कोई कैसे होगा? एएसपी.नेट में मैं शायद इसे किसी प्रकार के ग्रिड व्यू को गतिशील रूप से उत्पन्न करके हल कर दूंगा और इसे कॉलम को स्वतः उत्पन्न कर सकता हूं और फ़िल्टर लागू कर सकता हूं। ऐसा लगता है कि यह मुझे एमवीसी में और अधिक काम कर सकता है। मुझे कुछ याद आ रही है?

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

    var records = from rec in myTable 
           where someField = someValue 
           select rec; 
    foreach(rec in records) 
        rec.applyCalculation(); 
    db.SaveDbChanges(); 
    

    मुझे लगता है यह बहुत समय ले सकता है ऐसा करने के लिए नहीं है, लेगेसी एप्लिकेशन जबकि अभी करना होगा:

    UPDATE myTable 
    SET field1 = calc 
    WHERE someField = someValue 
    

    तो यह पूरी तरह से स्पष्ट नहीं है कि हम इस तरीके से अपने मॉडल का उपयोग कैसे करते हैं।

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

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

लंबे प्रश्नों के लिए खेद है। एएसपी.नेट और एमवीसी 3 में जांच के काम के बाद, मैं वास्तव में एमवीसी 3 के साथ जाना चाहता हूं!

+0

शीर्षक और अंतिम पंक्ति पढ़ें ... बाकी सब कुछ बहुत पढ़ रहा है। आपने कहा कि यह लंबा है, इसे एक प्रबंधनीय प्रश्न के लिए condensing कोशिश करें। एमवीसी के साथ jQuery सामग्री के लिए –

+0

यहां देखें http://awesome.codeplex.com/ – Omu

उत्तर

3

अगर मैं सवाल निकालने के लिए सही ढंग से तो यह मेरा जवाब होगा कामयाब:

  1. आप गुरु के बारे में अपनी सोच में सही कर रहे हैं - (उस बात के लिए या अन्य नियंत्रणों,) विस्तार ड्रॉपडाउन। jQuery AJAX/JSON कॉल (ज्यादातर GETs) आपको वही चाहिए जो आपको चाहिए। यदि आपके पृष्ठ पर केवल एक ड्रॉपडाउन है, तो निश्चित रूप से आपको उस तरह की अंतःक्रियाशीलता की आवश्यकता नहीं है - आप केवल इसके नियंत्रक कार्रवाई में मॉडल तैयार कर सकते हैं (आप एक चयनसूची वस्तु बनाते हैं)।

  2. यहाँ आप सबसे अधिक संभावना jqGrid या Flexigrid की तरह एक ग्रिड प्रणाली के कुछ प्रकार का उपयोग कर समाप्त होगा। वे स्वयं फ़िल्टरिंग/खोज/पूछताछ के संबंध में अधिकांश चीजें करते हैं। फिर भी आपको JSON नियंत्रक क्रियाएं प्रदान करनी होंगी जो डेटा की सेवा कर रही होंगी।

  3. हाँ आप एफई के माध्यम से एसक्यूएल निष्पादित कर सकते हैं। ExecuteStoreQuery() और ExecuteStoreCommand() है। यहाँ उन http://msdn.microsoft.com/en-us/library/ee358769.aspx

  4. के बारे में अधिक है, तो आप दृश्य से RenderAction() फोन करके इस कार्रवाई की है (जब भी आप यह कहते हैं) और आंशिक (या सामान्य) दृश्य बाहर प्रस्तुत करना मांग पर डेटा तैयार करने और करने के लिए डेटा (मॉडल) फ़ीड कर सकते हैं यह। RenderPartial() इसके साथ थोड़ा और बेकार है - इसके लिए आपको उस दृश्य में मॉडल उपलब्ध होना चाहिए जिसमें आप RenderPartial() पर कॉल कर रहे हैं। RenderPartial() कभी भी कंट्रोलर एक्शन पर वापस नहीं जाता है - यह सिर्फ उस एचटीएमएल को प्रस्तुत करता है जो आपके द्वारा कॉल में दिए गए मॉडल का उपयोग करके टेम्पलेट में परिभाषित किया गया है।

  5. दुर्भाग्य से मैं इसका जवाब पता नहीं है।

HTH

+0

4. आपके पास अपने मॉडल के लिए बेस क्लास बनाने का विकल्प भी है। इस श्रेणी में उस डेटा के लिए गुण होंगे जो आप सभी विचारों में उपलब्ध होना चाहते हैं। लेकिन मैं इसके लिए रेंडरएक्शन() पसंद करता हूं। – mare

+0

इस प्रतिक्रिया के लिए धन्यवाद, यह अविश्वसनीय रूप से सहायक था! –

1

आप इसे पसंद नहीं हो सकता है, लेकिन यह एक बहुत अधिक समझ में सिर्फ C++ आवेदन refactor करने के लिए कर सकता है। विशेष रूप से व्यापार के लिए। एचटीएमएल उत्पन्न करने में कुछ भी गलत नहीं है। टेम्पलेट्स के सेट की तुलना में आधुनिक एचटीएमएल/सीएसएस में रिफैक्टर करना बहुत आसान है।

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