मैं 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 के साथ जाना चाहता हूं!
शीर्षक और अंतिम पंक्ति पढ़ें ... बाकी सब कुछ बहुत पढ़ रहा है। आपने कहा कि यह लंबा है, इसे एक प्रबंधनीय प्रश्न के लिए condensing कोशिश करें। एमवीसी के साथ jQuery सामग्री के लिए –
यहां देखें http://awesome.codeplex.com/ – Omu