Итак, я работаю в .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";
И затем, с XAML есть похожие вещи. DataContext
рассматривается как объект, и вы должны надеяться и молиться, чтобы он соответствовал тому типу, который вы хотите. DependencyProperties должен использовать магические строки и соглашения о магическом именовании. И такие вещи:
MyData myDataObject = new MyData(DateTime.Now);
Binding myBinding = new Binding("MyDataProperty");
myBinding.Source = myDataObject;
Хотя он больше полагается на кастинг и различные магические поддержки во время выполнения.
Во всяком случае, я говорю все это, чтобы закончить здесь: почему это так хорошо переносится в мире .Net? Разве мы не используем статически типизированные языки, чтобы почти всегда знать, что это за вещи? Почему рефлексия и тип / метод / свойство / любые имена (как строки) так предпочтительны по сравнению с обобщениями и делегатами или даже генерацией кода?
Существуют ли унаследованные причины, по которым мне не хватает того, почему синтаксис маршрутизации ASP.Net полагается почти исключительно на рефлексию, чтобы фактически решить, как обрабатывать маршрут? Я ненавижу, когда я изменяю имя метода или свойства и вдруг что-то ломается, но, похоже, нет никаких ссылок на этот метод или свойство, и, конечно, нет ошибок компилятора. Почему очевидное удобство волшебных струн считалось «стоящим»?
Я знаю, что есть также статически типизированные альтернативы некоторым вещам, но они обычно занимают заднее сиденье и, кажется, никогда не встречаются в учебниках или других материалах для начинающих.
var
.