Pourquoi avons-nous autant de versions de .NET? Est-ce que c'est une bonne chose? [fermé]

9

Il existe de nombreuses "versions" du .NET Framework :

  • Complet ("normal")
  • Sous-ensemble de profil client
  • Silverlight dans les navigateurs Web
  • "Silverlight" sur Windows Phone
  • Cadre compact
  • WinRT

Lorsque le code C # est nécessaire sur une nouvelle plate-forme, il semblerait que Microsot préfère prendre le CLR complet et le découper en un petit sous-ensemble, créant de nouveaux assemblys et déplaçant des types, au lieu d'utiliser simplement des assemblys existants tels que ceux de la BCL . Silverlight, par exemple, a des classes / méthodes différentes de WPF (même jusqu'à certaines méthodes ayant des signatures légèrement différentes ou des implémentations très différentes), au lieu de simplement référencer la même implémentation de List<T>WPF.

S'agit-il de l'architecture idéale ou d'un signe d'héritage? Le BCL ne devrait-il pas fonctionner sur toutes les plates-formes, avec juste des bibliothèques de présentation / IO différentes sur chacune? Ou la BCL et les autres bibliothèques sont-elles trop gonflées, et leur séparation créerait trop de problèmes de compatibilité descendante, pour être acceptable?

Si nous partions d'un canevas vierge et ne nous inquiétions pas de la compatibilité descendante, la situation actuelle serait-elle vraiment la meilleure façon de gérer plusieurs plates-formes?

Paul Stovell
la source
7
Qu'en est-il de tous les votes serrés? C'est une question parfaitement légitime.
Mason Wheeler
2
On dirait qu'il pourrait être fermé, probablement parce qu'il est libellé un peu de manière jugée (on dirait que vous avez déjà décidé qu'il était "mal architecturé"). Vous voudrez peut-être la reformuler comme " pourquoi y a-t-il tant de saveurs de .NET?"
FrustratedWithFormsDesigner
1
@FrustratedWithFormsDesigner a raison. La question commence par un parti pris contre .NET. Si le ton était plus neutre, je suppose qu'aucun vote serré n'aurait été émis.
Odé le
2
J'ai l'impression que vous essayez de lancer un argument, sans chercher de réponses constructives à votre question. Je suppose que c'est pourquoi vous obtenez des votes serrés.
Tyanna
2
@Oded et autres - J'ai reformulé le titre et le corps, j'espère que cela rencontre votre approbation :)
Paul Stovell

Réponses:

5

Ce que fait Microsoft, diviser les routines en plusieurs packages, est courant. Il existe une version de .NET qui s'exécute sur des ordinateurs à carte unique (.Net Micro Framework) avec une mémoire limitée. Il ne serait pas logique d'inclure dans cette version tout ce qui est nécessaire pour exécuter une interface utilisateur graphique complète par exemple.

Si vous regardez Apple, l'iPhone ne contient pas toutes les routines que l'on trouverait sur un Mac.

JonnyBoats
la source
Mais plutôt qu'un développeur copiant / collant le code pour List<T>créer Micro Framework List<T>, la BCL ne devrait-elle pas être divisée correctement de sorte que les binaires s'exécutent sur toutes les plates-formes?
Paul Stovell
2
En d'autres termes, ne pas faire exécuter le code sur une autre plate-forme ne devrait-il pas simplement être un choix d'assemblages à prendre en charge?
Paul Stovell
1
Java le fait également. Par exemple, Java Card est un sous-ensemble de Java.
Bernard
2
@PaulStovell: Je ne sais pas comment MS le fait ... mais je ne serais pas surpris si MS avait un chemin / script de build séparé (pour le dire légèrement) qui prend le code et le construit pour la plate-forme cible - donc ce n'est pas un copier / coller de List<T>mais cela peut élaguer certaines choses du code ou fusionner avec des choses spécifiques à la plate-forme et produire un élément de déploiement.
Steven Evers
1

Je ne pense pas que .NET soit le problème. Bien qu'il existe différents temps d'exécution, ils sont toujours compatibles, c'est pourquoi des technologies telles que les bibliothèques de classes portables fonctionnent (pour la majorité des temps d'exécution que vous avez répertoriés).

Par exemple, chaque version ne doit-elle pas référencer un seul assembly partagé appelé "System.Collections.dll", au lieu que chaque runtime ait sa propre copie de System.dll / mscorlib.dll avec différentes copies des collections?

Pourquoi est-ce nécessaire? Tant qu'ils sont tous compatibles (voir à nouveau les bibliothèques de classes portables), cela ne devrait pas avoir d'importance, car le BCL fait partie du runtime lui-même et est distribué en tandem.

Reed Copsey
la source
Ne devrais-je pas être capable d'écrire une classe qui l'utilise List<T>et l'exécute uniquement sur n'importe quelle plate-forme sans créer de bibliothèque portable? Ou ne devrait-il pas List<T>être lui-même dans une bibliothèque portable? Les bibliothèques portables me semblent être une solution de contournement plutôt qu'une partie d'un design élégant.
Paul Stovell
1

.NET remplace et développe essentiellement les objets com dans un environnement Windows. Il est également utilisé pour identifier un grand nombre de technologies très différentes, imaginez que si Adobe renommait tous ses produits pour avoir un mot commun en leur nom, c'est en quelque sorte ce qui se passe avec .NET

Ryathal
la source