Por que temos tantos sabores do .NET? isso é uma coisa boa? [fechadas]

9

Existem muitos "sabores" do .NET Framework :

  • Cheio ("normal")
  • Subconjunto do perfil do cliente
  • Silverlight em navegadores da web
  • "Silverlight" No Windows Phone
  • Estrutura compacta
  • WinRT

Quando o código C # é necessário em uma nova plataforma, parece que a Microsot prefere pegar o CLR completo e reduzi-lo a um pequeno subconjunto, criando novos assemblies e movendo tipos, em vez de usar assemblies existentes, como os da BCL . O Silverlight, por exemplo, possui diferentes classes / métodos para o WPF (até alguns métodos com assinaturas ligeiramente diferentes ou implementações muito diferentes), em vez de simplesmente fazer referência à mesma implementação do List<T>WPF.

Essa é a arquitetura ideal ou um sinal de legado? O BCL não deve ser executado em todas as plataformas, com apenas bibliotecas de apresentação / IO diferentes em cada uma? Ou a BCL e outras bibliotecas estão inchadas demais e dividi-las criaria muitos problemas de compatibilidade com versões anteriores, para serem aceitáveis?

Se começássemos de uma tela em branco e não estivéssemos preocupados com a compatibilidade com versões anteriores, a situação atual seria realmente a melhor maneira de lidar com várias plataformas?

Paul Stovell
fonte
7
O que há com todos os votos próximos? Esta é uma pergunta perfeitamente legítima.
Mason Wheeler
2
Parece que pode ser fechado, provavelmente porque é um pouco julgador (parece que você já decidiu que é "mal arquitetado"). Você pode reformulá-lo como " por que existem tantos sabores do .NET?"
FrustratedWithFormsDesigner
11
@FrustratedWithFormsDesigner está certo. A pergunta começa com um viés contra o .NET. Se o tom fosse mais neutro, suspeito que nenhum voto próximo teria sido dado.
Oded
2
Parece-me que você está tentando iniciar uma discussão, sem procurar respostas construtivas para sua pergunta. Suponho que é por isso que você está recebendo votos próximos.
Tyanna
2
@Oded e outros - eu reformulado o título e corpo, esperança que se encontra com a sua aprovação :)
Paul Stovell

Respostas:

5

O que a Microsoft está fazendo, dividindo as rotinas em vários pacotes, é comum. Existe uma versão do .NET executada em computadores de placa única (.Net Micro Framework) com memória limitada. Não faria sentido incluir nessa versão tudo o necessário para executar uma interface gráfica completa do usuário, por exemplo.

Se você olhar para a Apple, o iPhone não contém todas as rotinas que você encontraria em um Mac.

JonnyBoats
fonte
Mas, em vez de um desenvolvedor copiar / colar o código para List<T>criar o Micro Framework List<T>, o BCL não deve ser dividido adequadamente, de modo que os binários sejam executados em todas as plataformas?
Paul Stovell
2
Em outras palavras, a execução do código em outra plataforma não deveria ser apenas um caso de escolha de quais assemblies oferecer suporte?
Paul Stovell
11
Java faz isso também. Por exemplo, o Java Card é um subconjunto do Java.
Bernard
2
@PaulStovell: Não tenho certeza de como a MS faz isso ... mas não ficaria surpreso se a MS tivesse um caminho / script de compilação separado (para dizer o mínimo) que pega o código e o constrói para a plataforma de destino - então não é uma cópia / colar, List<T>mas pode remover algumas coisas do código ou mesclar-se com algumas coisas específicas da plataforma e produzir um item de implantação.
Steven Evers
1

Eu não acho que o .NET seja o problema. Embora existam vários tempos de execução, eles ainda são compatíveis, e é por isso que tecnologias como as Bibliotecas de Classes Portáteis funcionam (na maioria dos tempos de execução listados).

Por exemplo, cada tipo não deve fazer referência a um único assembly compartilhado chamado "System.Collections.dll", em vez de cada tempo de execução ter sua própria cópia do System.dll / mscorlib.dll com várias cópias das coleções?

Por que isso é necessário? Desde que sejam todos compatíveis (novamente, consulte as Bibliotecas de Classes Portáteis), isso não deve importar, pois o BCL faz parte do próprio tempo de execução e distribuído em conjunto.

Reed Copsey
fonte
Eu não deveria ser capaz de escrever uma classe que apenas a use List<T>e execute em qualquer plataforma sem criar uma biblioteca portátil? Ou não deveria List<T>estar em uma biblioteca portátil? As bibliotecas portáteis me parecem uma solução alternativa e não parte de um design elegante.
Paul Stovell
1

O .NET está basicamente substituindo e expandindo objetos com em um ambiente Windows. Também é usado para identificar muitas tecnologias muito diferentes, imagine se a Adobe renomeou todos os seus produtos com uma palavra comum em seu nome, isso é o que está acontecendo com o .NET

Ryathal
fonte