Por que o mundo .Net parece adotar seqüências de caracteres mágicas em vez de alternativas com tipagem estática?

46

Então, eu trabalho no .Net. Eu faço projetos de código aberto no .net. Um dos meus maiores problemas com isso não é necessariamente com o .net, mas com a comunidade e os frameworks em torno dele. Parece em todos os lugares que esquemas mágicos de nomeação e strings são tratados como a melhor maneira de fazer tudo. Declaração ousada, mas olhe para ela:

ASP.Net MVC:

Olá rota mundial:

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

O que isto significa é que o ASP.Net MVC irá de alguma forma procurar HomeController em seu código. De alguma forma, crie uma nova instância e, em seguida, chame a função Index aparentemente com um parâmetro id de algum tipo. E depois há outras coisas como:

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

E também há coisas semelhantes com o XAML. DataContext é tratado como um objeto e você tem que esperar e orar para que ele seja resolvido com o tipo desejado. DependencyProperties deve usar strings mágicas e convenções de nomenclatura mágica. E coisas assim:

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

Embora se baseie mais em fundição e vários suportes de tempo de execução mágicos.

Enfim, eu digo tudo isso para acabar aqui: Por que isso é tão bem tolerado no mundo do .net? Não estamos usando linguagens com tipagem estática para quase sempre saber quais são os tipos de coisas? Por que a reflexão e o tipo / método / propriedade / quaisquer nomes (como cadeias de caracteres) preferiam tanto em comparação com genéricos e delegados ou até geração de código?

Existem motivos herdados pelos quais eu não sei por que a sintaxe de roteamento do ASP.Net depende quase exclusivamente da reflexão para realmente resolver como lidar com uma rota? Eu odeio quando eu mudo o nome de um método ou propriedade e de repente as coisas quebram, mas não parece haver nenhuma referência a esse método ou propriedade e obviamente não há erros no compilador. Por que a aparente conveniência das cordas mágicas era considerada "valiosa"?

Eu sei que existem também alternativas geralmente tipadas estaticamente para algumas coisas, mas elas geralmente ficam em segundo plano e parecem nunca estar em tutoriais ou outro material para iniciantes.

    
por Earlz 14.02.2013 / 19:33
fonte

1 resposta

30

Na verdade, há um retrocesso no mundo do .NET contra essas mesmas coisas que você mencionou. No primeiro exemplo fornecido, no entanto, o mecanismo de roteamento recebe uma convenção para mapear a rota padrão. O próprio fato de as rotas serem dinâmicas torna quase impossível usar uma configuração estática.

Você também mencionou o XAML / WPF, ambos os quais estavam em desenvolvimento bem antes dos genéricos serem introduzidos no .NET e voltar a dar suporte aos genéricos atrasaria ainda mais um produto já muito atrasado (Longhorn / Vista).

Existem exemplos dentro da estrutura ASP.NET MVC de uso de expressões lambda no lugar de strings mágicas e o Entity Framework / LINQ o leva ainda mais longe, onde o idioma e a estrutura fornecem suporte nativo para compor consultas SQL em um gráfico de objeto estático ( em vez de construir seqüências de caracteres mágicas de SQL, você obtém validação de tempo de compilação de suas consultas).

Para outros exemplos de configuração estática, consulte o mapa de estrutura e outros contêineres de injeção de dependência modernos e outras estruturas que precisam inspecionar o gráfico de objeto no tempo de execução, mas permitir que o desenvolvedor forneça sugestões estaticamente usando expressões lambda.

Portanto, a resposta curta é que, historicamente, o .NET não suportava a passagem estática de um gráfico de objetos até a versão 3.5. Agora que temos, muitos desenvolvedores preferem as strings mágicas e muitos têm pressionado por um suporte ainda mais profundo, como um operador symbolOf que funciona de maneira semelhante ao operador typeOf.

    
por 14.02.2013 / 22:04
fonte