Dlaczego mamy tyle smaków .NET? Czy to dobrze? [Zamknięte]

9

Istnieje wiele „smaków” .NET Framework :

  • Pełny („normalny”)
  • Podzbiór profilu klienta
  • Silverlight w przeglądarkach internetowych
  • „Silverlight” w systemie Windows Phone
  • Kompaktowe ramy
  • WinRT

Gdy potrzebny jest kod C # na nowej platformie, wydaje się, że Microsot woli wziąć pełny CLR i rozebrać go do małego podzbioru, tworząc nowe zestawy i przenosząc typy, zamiast po prostu używać istniejących zestawów, takich jak te w BCL . Na przykład Silverlight ma inne klasy / metody niż WPF (nawet niektóre metody mające nieco inne podpisy lub bardzo różne implementacje), zamiast po prostu odwoływać się do tej samej implementacji List<T>co WPF.

Czy to idealna architektura, czy znak dziedzictwa? Czy BCL nie powinien być uruchamiany na wszystkich platformach z po prostu różnymi bibliotekami prezentacji / IO na każdej z nich? A może BCL i inne biblioteki są zbyt rozdęte, a ich rozdzielenie spowodowałoby zbyt wiele problemów ze zgodnością wsteczną, aby było możliwe do zaakceptowania?

Gdybyśmy zaczęli od pustego obszaru roboczego i nie martwili się kompatybilnością wsteczną, czy obecna sytuacja byłaby naprawdę najlepszym sposobem obsługi wielu platform?

Paul Stovell
źródło
7
O co chodzi z tymi wszystkimi bliskimi głosami? To jest całkowicie uzasadnione pytanie.
Mason Wheeler
2
Wygląda na to, że może zostać zamknięty, prawdopodobnie dlatego, że jest sformułowany nieco osądowo (brzmi tak, jakbyś już zdecydował, że jest „źle zaprojektowany”). Możesz przeformułować go jako „ dlaczego jest tyle smaków .NET?”
FrustratedWithFormsDesigner
1
@FrustratedWithFormsDesigner ma rację. Pytanie zaczyna się od stronniczości przeciwko .NET. Gdyby ton był bardziej neutralny, podejrzewam, że nie oddano by żadnych ścisłych głosów.
Oded
2
Wydaje mi się, że próbujesz rozpocząć dyskusję, a nie szukasz konstruktywnych odpowiedzi na swoje pytanie. Domyślam się, że dlatego otrzymujesz bliskie głosy.
Tyanna
2
@Oded i inni - Zmieniłem tytuł i treść, mam nadzieję, że spotka się z twoją aprobatą :)
Paul Stovell

Odpowiedzi:

5

To, co robi Microsoft, dzieląc procedury na wiele pakietów, jest powszechne. Istnieje wersja .NET, która działa na komputerach jednopłytkowych (.Net Micro Framework) z ograniczoną pamięcią. Nie ma sensu umieszczać w tej wersji wszystkiego, co jest potrzebne na przykład do uruchomienia pełnego graficznego interfejsu użytkownika.

Jeśli spojrzysz na Apple, iPhone nie zawiera wszystkich procedur, które można znaleźć na komputerze Mac.

JonnyBoats
źródło
Ale zamiast dewelopera kopiującego / wklejającego kod w List<T>celu stworzenia Micro Framework List<T>, czy BCL nie powinien być odpowiednio podzielony, aby pliki binarne działały na wszystkich platformach?
Paul Stovell,
2
Innymi słowy, czy nie powinno się pozwolić, aby kod działał na innej platformie, a nie tylko wybrać, które zestawy mają być obsługiwane?
Paul Stovell,
1
Java też to robi. Na przykład Java Card jest podzbiorem Java.
Bernard
2
@PaulStovell: Nie jestem pewien, jak to robi MS ... ale nie zdziwiłbym się, gdyby MS miało osobną ścieżkę / skrypt kompilacji (delikatnie mówiąc), który pobiera kod i buduje go dla platformy docelowej - więc nie jest to kopiowanie / wklejanie, List<T>ale może wycinać niektóre elementy z kodu lub łączyć się z niektórymi elementami specyficznymi dla platformy i generować element wdrażania.
Steven Evers
1

Nie sądzę, że problem stanowi .NET. Chociaż istnieją różne środowiska wykonawcze, są one nadal kompatybilne, dlatego takie technologie jak Biblioteki klas przenośnych działają (dla większości wymienionych środowisk wykonawczych).

Na przykład, czy każdy smak nie powinien odwoływać się do pojedynczego, wspólnego zestawu o nazwie „System.Collections.dll”, zamiast do każdego środowiska wykonawczego posiadającego własną kopię System.dll / mscorlib.dll z różnymi kopiami kolekcji?

Dlaczego jest to potrzebne? Dopóki wszystkie są kompatybilne (ponownie, zobacz Biblioteki klas przenośnych), nie powinno to mieć znaczenia, ponieważ BCL jest częścią samego środowiska wykonawczego i jest dystrybuowany w tandemie.

Reed Copsey
źródło
Czy nie powinienem być w stanie napisać klasy, która używa tylko List<T>i uruchomić ją na dowolnej platformie bez tworzenia przenośnej biblioteki? A może List<T>sama nie powinna znajdować się w przenośnej bibliotece? Przenośne biblioteki wydają mi się raczej obejściem niż częścią eleganckiego projektu.
Paul Stovell,
1

.NET zasadniczo zastępuje i rozwija obiekty COM w środowisku Windows. Służy również do identyfikowania wielu bardzo różnych technologii, wyobraź sobie, że jeśli Adobe zmienił nazwę wszystkich swoich produktów, aby mieć wspólne słowo w ich nazwie, to coś takiego dzieje się z .NET

Ryathal
źródło