Warum haben wir so viele Arten von .NET? Ist es eine gute Sache? [geschlossen]

9

Es gibt viele "Varianten" von .NET Framework :

  • Voll ("normal")
  • Teilmenge des Clientprofils
  • Silverlight in Webbrowsern
  • "Silverlight" unter Windows Phone
  • Kompakter Rahmen
  • WinRT

Wenn C # -Code auf einer neuen Plattform benötigt wird, scheint es, dass Microsot es vorzieht, die vollständige CLR auf eine kleine Teilmenge zu reduzieren, neue Assemblys zu erstellen und Typen zu verschieben, anstatt nur vorhandene Assemblys wie die in der BCL zu verwenden . Silverlight hat beispielsweise andere Klassen / Methoden als WPF (sogar bis zu einigen Methoden mit leicht unterschiedlichen Signaturen oder sehr unterschiedlichen Implementierungen), anstatt einfach auf dieselbe Implementierung List<T>wie WPF zu verweisen .

Ist dies die ideale Architektur oder ein Zeichen des Erbes? Sollte die BCL nicht auf allen Plattformen ausgeführt werden, mit jeweils nur unterschiedlichen Präsentations- / E / A-Bibliotheken? Oder sind die BCL und andere Bibliotheken zu aufgebläht, und eine Aufteilung würde zu viele Abwärtskompatibilitätsprobleme verursachen, um akzeptabel zu sein?

Wenn wir von einer leeren Leinwand ausgehen und uns keine Sorgen um die Abwärtskompatibilität machen würden, wäre die aktuelle Situation wirklich der beste Weg, um mit mehreren Plattformen umzugehen?

Paul Stovell
quelle
7
Was ist mit all den engen Abstimmungen? Dies ist eine absolut legitime Frage.
Mason Wheeler
2
Dies sieht so aus, als würde es geschlossen werden, wahrscheinlich weil es ein wenig urteilsmäßig formuliert ist (es hört sich so an, als hätten Sie bereits entschieden, dass es "schlecht aufgebaut" ist). Vielleicht möchten Sie es umformulieren als " Warum gibt es so viele Arten von .NET?"
FrustratedWithFormsDesigner
1
@FrustratedWithFormsDesigner ist richtig. Die Frage beginnt mit einer Voreingenommenheit gegenüber .NET. Wenn der Ton neutraler gewesen wäre, hätte ich keine engen Stimmen abgegeben.
Oded
2
Ich habe das Gefühl, dass Sie versuchen, ein Argument zu beginnen, ohne nach konstruktiven Antworten auf Ihre Frage zu suchen. Ich vermute, deshalb bekommen Sie enge Stimmen.
Tyanna
2
@Oded und andere - Ich habe den Titel und den Text umformuliert, hoffe, dass dies Ihre Zustimmung findet :)
Paul Stovell

Antworten:

5

Was Microsoft tut, indem es die Routinen in mehrere Pakete aufteilt, ist üblich. Es gibt eine Version von .NET, die auf Single-Board-Computern (.Net Micro Framework) mit begrenztem Speicher ausgeführt wird. Es wäre nicht sinnvoll, in diese Version alles aufzunehmen, was zum Beispiel zum Ausführen einer vollständigen grafischen Benutzeroberfläche erforderlich ist.

Wenn Sie sich Apple ansehen, enthält das iPhone nicht alle Routinen, die man auf einem Mac finden würde.

JonnyBoats
quelle
Sollte die BCL nicht ordnungsgemäß aufgeteilt werden, damit die Binärdateien auf allen Plattformen ausgeführt werden, anstatt dass ein Entwickler den Code kopiert / einfügt List<T>, um Micro Framework zu erstellen List<T>?
Paul Stovell
2
Mit anderen Worten, sollte es nicht nur darum gehen, die zu unterstützenden Assemblys auszuwählen, damit der Code auf einer anderen Plattform ausgeführt wird?
Paul Stovell
1
Java macht das auch. Beispielsweise ist Java Card eine Teilmenge von Java.
Bernard
2
@PaulStovell: Ich bin mir nicht sicher, wie MS das macht ... aber ich wäre nicht überrascht, wenn MS einen separaten Build-Pfad / ein separates Skript (um es leicht auszudrücken) hätte, der den Code aufnimmt und ihn für die Zielplattform erstellt - also Es ist kein Kopieren / Einfügen von, List<T>aber es kann einige Dinge aus dem Code entfernen oder mit einigen plattformspezifischen Dingen zusammenführen und ein Bereitstellungselement erzeugen.
Steven Evers
1

Ich denke nicht, dass .NET das Problem ist. Obwohl es verschiedene Laufzeiten gibt, sind sie dennoch kompatibel, weshalb Technologien wie die Portable Class Libraries funktionieren (für die meisten der von Ihnen aufgelisteten Laufzeiten).

Sollte nicht jede Version auf eine einzelne, gemeinsam genutzte Assembly mit dem Namen "System.Collections.dll" verweisen, anstatt dass jede Laufzeit eine eigene Kopie von System.dll / mscorlib.dll mit verschiedenen Kopien der Sammlungen hat?

Warum wird das benötigt? Solange sie alle kompatibel sind (siehe auch die Portable Class Libraries), sollte dies keine Rolle spielen, da die BCL Teil der Laufzeit selbst ist und zusammen verteilt wird.

Reed Copsey
quelle
Sollte ich nicht in der Lage sein, eine Klasse zu schreiben, die sie nur List<T>auf einer beliebigen Plattform verwendet und ausführt, ohne eine tragbare Bibliothek zu erstellen? Oder sollte es sich nicht List<T>selbst in einer tragbaren Bibliothek befinden? Tragbare Bibliotheken sind für mich eher eine Problemumgehung als Teil eines eleganten Designs.
Paul Stovell
1

.NET ersetzt und erweitert im Wesentlichen COM-Objekte in einer Windows-Umgebung. Es wird auch verwendet, um viele sehr unterschiedliche Technologien zu identifizieren. Stellen Sie sich vor, wenn Adobe alle Produkte umbenennt, um ein gemeinsames Wort in ihrem Namen zu haben, geschieht dies mit .NET

Ryathal
quelle