Also arbeite ich in .Net. Ich mache Open Source Projekte in .Net. Eines meiner größten Probleme ist nicht notwendigerweise .Net, sondern die Community und die Frameworks, die es gibt. Überall scheint es so, als würden magische Namensschemata und Strings als der beste Weg angesehen, alles zu tun. Mutige Aussage, aber sieh es dir an:
ASP.Net MVC:
Hallo Weltstrecke:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
Dies bedeutet, dass ASP.Net MVC HomeController
in Ihrem Code irgendwie nachschlägt . Machen Sie irgendwie eine neue Instanz davon und rufen Sie dann die Funktion Index
anscheinend mit einem id
Parameter irgendeiner Art auf. Und dann gibt es noch andere Dinge wie:
RenderView("Categories", categories);
...or..
ViewData["Foobar"]="meh";
Ähnliches gilt auch für XAML. DataContext
wird als Objekt behandelt und man muss hoffen und beten, dass es sich zu dem Typ auflöst, den man will. Für DependencyProperties müssen magische Zeichenfolgen und Namenskonventionen verwendet werden. Und solche Dinge:
MyData myDataObject = new MyData(DateTime.Now);
Binding myBinding = new Binding("MyDataProperty");
myBinding.Source = myDataObject;
Obwohl es mehr auf Casting und verschiedene magische Laufzeitunterstützungen setzt.
Jedenfalls sage ich das alles, um hier zu landen: Warum wird das in der .Net-Welt so gut toleriert? Verwenden wir nicht statisch typisierte Sprachen, um fast immer zu wissen, was für Dinge das sind? Warum werden Reflektion und Typ / Methode / Eigenschaft / beliebige Namen (als Zeichenfolgen) im Vergleich zu Generika und Delegaten oder sogar zur Codegenerierung so bevorzugt?
Gibt es erbliche Gründe, die mir fehlen, weil die Routingsyntax von ASP.Net fast ausschließlich auf Reflexion beruht, um tatsächlich zu ermitteln, wie eine Route gehandhabt wird? Ich hasse es, wenn ich den Namen einer Methode oder Eigenschaft ändere und plötzlich etwas kaputt geht, aber es scheint keine Verweise auf diese Methode oder Eigenschaft zu geben und es gibt natürlich keine Compilerfehler. Warum wurde die offensichtliche Bequemlichkeit von magischen Saiten als "wert" angesehen?
Ich weiß, dass es zu einigen Dingen auch häufig statisch typisierte Alternativen gibt, aber sie treten normalerweise in den Hintergrund und scheinen nie in Tutorials oder anderem Anfängermaterial vorzufinden.
var
.