.Net दुनिया स्थैतिक रूप से टाइप किए गए विकल्पों के बजाय जादू के तार क्यों लगाती है?


47

इसलिए, मैं .Net में काम करता हूं। मैं .Net में ओपन सोर्स प्रोजेक्ट बनाता हूँ। इसके साथ मेरी सबसे बड़ी समस्याओं में से एक .Net के साथ जरूरी नहीं है, लेकिन समुदाय और इसके चारों ओर चौखटे के साथ। यह हर जगह लगता है कि जादुई नामकरण योजनाओं और तारों को सब कुछ करने का सबसे अच्छा तरीका माना जाता है। बोल्ड स्टेटमेंट, लेकिन इसे देखें:

ASP.Net MVC:

नमस्ते विश्व मार्ग:

        routes.MapRoute(
            "Default",                                              // Route name
            "{controller}/{action}/{id}",                           // URL with parameters
            new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
        );

इसका मतलब यह है कि ASP.Net MVC किसी तरह HomeControllerआपके कोड में दिखेगा । किसी तरह इसका एक नया उदाहरण बनाते हैं, और फिर फ़ंक्शन को Index स्पष्ट रूप idसे किसी प्रकार के पैरामीटर के साथ कहते हैं । और फिर अन्य चीजें हैं जैसे:

RenderView("Categories", categories);
...or..
ViewData["Foobar"]="meh";

और फिर एक्सएएमएल के साथ भी ऐसी ही चीजें हैं। DataContextएक वस्तु के रूप में व्यवहार किया जाता है और आपको आशा और प्रार्थना करनी होती है कि यह आपके इच्छित प्रकार का समाधान करे। DependencyProperties जादू तार और जादू नामकरण सम्मेलनों का उपयोग करना चाहिए। और इस तरह की चीजें:

  MyData myDataObject = new MyData(DateTime.Now);      
  Binding myBinding = new Binding("MyDataProperty");
  myBinding.Source = myDataObject;

हालांकि यह कास्टिंग पर अधिक निर्भर करता है और विभिन्न जादुई रनटाइम समर्थन करता है।

वैसे भी, मैं यह सब यहाँ समाप्त करने के लिए कहता हूँ: यह .Net दुनिया में इतनी अच्छी तरह से क्यों सहन किया जाता है? क्या हम लगभग हमेशा जानने के लिए वैधानिक रूप से टाइप की गई भाषाओं का उपयोग नहीं कर रहे हैं? प्रतिबिंब और प्रकार / विधि / संपत्ति / जो भी नाम (तार के रूप में) जेनेरिक और डेलीगेट्स या कोड कोड पीढ़ी की तुलना में बहुत अधिक पसंद किए जाते हैं?

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

मुझे पता है कि आमतौर पर कुछ चीजों के लिए सांख्यिकीय रूप से टाइप किए गए विकल्प होते हैं, लेकिन वे आमतौर पर एक बैकसीट लेते हैं और कभी भी ट्यूटोरियल या अन्य शुरुआती सामग्री में नहीं लगते हैं।


14
व्यर्थ गत्यात्मकता तब से सभी गुस्से में है जब हमारे सीपीयू इसे निष्पादित करने के लिए काफी तेज थे।
डेडएमजी

7
ऐसा कैसे? मैंने LINQ के साथ ऐसा कोई उदाहरण नहीं देखा है।
डेडएमजी

6
मेरा विनम्र अनुमान यह है कि उचित रूप से टाइप किया गया विकल्प बहुत असुविधाजनक है। यह एक ऐसा विषय है जो वास्तव में अधिकांश प्रकार के सिस्टम के साथ बदल जाता है: "हम इस प्रकार की प्रणाली में ऐसा करना चाहते हैं, लेकिन यह पर्याप्त रूप से व्यक्त नहीं किया गया है।" (या उलटा: "हमने इसे सफलतापूर्वक टाइप सिस्टम में व्यक्त किया, लेकिन इसने चीजों को तीन बार जटिल बना दिया है।") @ GlenH7 मैं सभी LINQ से बहुत परिचित नहीं हूं, लेकिन जिन बिट्स का मैंने इस्तेमाल किया है, वे प्रदर्शित नहीं करते हैं इस पोस्ट के पास भी कुछ भी नहीं है। एक उदाहरण देने के लिए देखभाल?

2
@Earlz अधिक महत्वपूर्ण बात, अनाम वस्तुओं को सांख्यिकीय रूप से टाइप किया जाता है। कोई जादू के तार नहीं हैं, संकलक को शामिल हर चीज का नाम और प्रकार पता है। के हर दूसरे उपयोग के लिए सहेजें var

1
@ एर्लज़ दिलचस्प है, हालांकि कोई यह तर्क दे सकता है कि लैम्ब्डा सिंटैक्स यहां अतिरिक्त ब्लोट है। मेरा अनुमान है कि वे मैजिक स्ट्रिंग / कन्वेंशन दृष्टिकोण के साथ गए हैं क्योंकि यह मृत सरल है, बहुतों के लिए "अच्छा पर्याप्त" है, और वे कुछ मार्गदर्शन / सुरक्षा देने के लिए टूलिंग को हमेशा अनुकूलित कर सकते हैं। यह सुरक्षा और सुविधा, IMHO के बीच का व्यापार है। एक गतिशील ViewBag का उपयोग भी इस मानसिकता पर संकेत देता है (यह नहीं कि मैं इसके साथ पूरी तरह से सहमत हूं)।
डैनियल बी

जवाबों:


31

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

आप XAML / WPF का भी उल्लेख करते हैं, जो दोनों ही जेनेरिक .NET में पेश किए जाने से पहले अच्छी तरह से विकास के अधीन थे और जेनेरिक को समर्थन देने के लिए वापस जाने से पहले से ही बहुत देर से उत्पाद (लॉन्गहॉर्न / विस्टा) में और भी देरी हो जाती।

मैजिक स्ट्रिंग्स के स्थान पर लैम्ब्डा एक्सप्रेशन का उपयोग करने के ASP.NET MVC फ्रेमवर्क के भीतर उदाहरण हैं और Entity Framework / LINQ इसे और भी आगे ले जाता है जहाँ भाषा और फ्रेमवर्क एक स्थैतिक ऑब्जेक्ट ग्राफ पर SQL प्रश्नों की रचना के लिए मूल समर्थन प्रदान करता है (निर्माण के बजाय) जादुई एसक्यूएल तार, आपको अपने प्रश्नों का संकलन समय मिल जाता है)।

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

तो संक्षिप्त उत्तर यह है कि ऐतिहासिक रूप से, .NET ने 3.5 रिलीज तक किसी ऑब्जेक्ट ग्राफ के स्थिर ट्रैवर्सल का समर्थन नहीं किया था। अब जब हमारे पास यह है, तो कई डेवलपर्स इसे जादू के तार के ऊपर पसंद करते हैं और कई लोग इसे और भी गहरे समर्थन के लिए जोर दे रहे हैं जैसे कि एक सिंबो ऑपरेटर जो टाइपऑफ ऑपरेटर के समान काम करता है।


3
XAML क्रिया है जैसा कि यह है ... जेनरिक के लिए समर्थन जोड़ने से यह और भी कठिन हो जाएगा (हाँ मुझे पता है कि पूरा XAML मानव तर्क के लिए नहीं बना है)। इसके अलावा, मैं एक वास्तविक प्रोग्रामिंग भाषा की तुलना में एक्सएएमएल को एचटीएमएल के समान अधिक देखता हूं। यह प्रदर्शित होने वाली वस्तुओं के प्रकार के बारे में परवाह नहीं करनी चाहिए, बस इसे कैसे प्रदर्शित किया जाए।
माइकल ब्राउन

2
जेनरिक 2.0 में आ गया, लेकिन हमें 3.5 (LINQ के साथ) तक भाव नहीं मिले। अभिव्यक्तियां क्या शक्ति हैं LINQ और समुदाय ने उस शक्ति को लिया है और उसके साथ चलता है। तकनीक को स्थिर प्रतिबिंब के
माइकल ब्राउन

1
स्थिर प्रतिबिंब के बारे में अच्छी बात है। मैं भूल गया कि 3.5
अर्लज़

2
यह एक शानदार जवाब है और मैं निश्चित रूप से पुशबैक से सहमत हूं। इन सभी चीजों से मैं प्लेग से बचता हूं क्योंकि अगर कोई टाइपो या बग है तो वे केवल रनटाइम पर पकड़े जाते हैं, जिसका अर्थ है कि वे बहुत आसानी से चूक सकते हैं। वे रिफलेक्टिंग को भी बहुत अलग बनाते हैं। बचने से बचना चाहिए!
रॉकलैन

2
पुशबैक पर सहमत हों। टी 4 एमवीसी एक ऐसी परियोजना है जो बहुत सारे तार को हटाने और उन्हें जोरदार टाइप किए गए कोड के साथ बदलने की आकांक्षा रखती है।
कार्सन 63000
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.