Mengapa kita memiliki begitu banyak rasa .NET? Apakah itu hal yang baik? [Tutup]

9

Ada banyak "rasa" dari .NET Framework :

  • Penuh ("normal")
  • Subset profil klien
  • Silverlight di browser web
  • "Silverlight" di Windows Phone
  • Kerangka kerja yang kompak
  • WinRT

Ketika kode C # diperlukan pada platform baru, akan terlihat bahwa Microsot lebih suka untuk mengambil CLR penuh dan mengupasnya menjadi subset kecil, membuat rakitan baru dan memindahkan jenis-jenis, bukan hanya menggunakan rakitan yang ada seperti yang ada di BCL . Silverlight misalnya memiliki kelas / metode yang berbeda untuk WPF (bahkan hingga beberapa metode memiliki tanda tangan yang sedikit berbeda atau implementasi yang sangat berbeda), daripada hanya merujuk pada implementasi yang sama List<T>seperti WPF.

Apakah ini arsitektur yang ideal, atau tanda warisan? Bukankah seharusnya BCL berjalan di semua platform, dengan hanya pustaka presentasi / IO yang berbeda pada masing-masing platform? Atau apakah BCL dan perpustakaan lain terlalu membengkak, dan membaginya akan membuat terlalu banyak masalah kompatibilitas, dapat diterima?

Jika kita mulai dari kanvas kosong dan tidak khawatir tentang kompatibilitas ke belakang, apakah situasi saat ini benar-benar cara terbaik untuk menangani beberapa platform?

Paul Stovell
sumber
7
Ada apa dengan semua suara dekat? Ini adalah pertanyaan yang sangat sah.
Mason Wheeler
2
Ini sepertinya ditutup, mungkin karena kata itu sedikit menghakimi (sepertinya Anda sudah memutuskan bahwa itu "arsitek yang buruk"). Anda mungkin ingin mengubah kata menjadi " mengapa ada begitu banyak rasa .NET?"
FrustratedWithFormsDesigner
1
@FrustratedWithFormsDesigner benar. Pertanyaannya dimulai dengan bias terhadap .NET. Jika nadanya lebih netral saya kira tidak ada suara dekat yang akan diberikan.
Oded
2
Rasanya bagi saya seolah Anda mencoba memulai argumen, tidak mencari jawaban konstruktif untuk pertanyaan Anda. Saya menduga itu sebabnya Anda mendapatkan suara yang dekat.
Tyanna
2
@Oded dan lain-lain - Saya telah menulis ulang judul dan isi, harapan yang sesuai dengan persetujuan Anda :)
Paul Stovell

Jawaban:

5

Apa yang dilakukan Microsoft, membagi rutinitas menjadi beberapa paket, adalah hal biasa. Ada versi. NET yang berjalan pada komputer papan tunggal (.Net Micro Framework) dengan memori terbatas. Misalnya, tidak masuk akal untuk memasukkan semua versi yang diperlukan untuk menjalankan antarmuka pengguna grafis lengkap dalam versi itu.

Jika Anda melihat Apple, iPhone tidak mengandung semua rutinitas yang akan ditemukan di Mac.

JonnyBoats
sumber
Tetapi alih-alih pengembang menyalin / menempel kode untuk List<T>membuat Kerangka Mikro List<T>, bukankah BCL harus dipisah dengan benar sehingga binari berjalan di semua platform?
Paul Stovell
2
Dengan kata lain, bukankah seharusnya membuat kode dijalankan pada platform lain hanya menjadi kasus memilih majelis yang akan didukung?
Paul Stovell
1
Java juga melakukan ini. Misalnya, Kartu Java adalah subset dari Java.
Bernard
2
@ PaulStovell: Saya tidak yakin bagaimana MS melakukannya ... tapi saya tidak akan terkejut jika MS memiliki path / skrip build yang terpisah (untuk membuatnya lebih ringan) yang mengambil kode dan membangunnya untuk platform target - jadi itu bukan salinan / tempel dari List<T>tetapi mungkin memangkas beberapa hal dari kode atau bergabung dengan beberapa hal platform spesifik dan menghasilkan item penyebaran.
Steven Evers
1

Saya tidak berpikir. NET adalah masalahnya. Meskipun ada berbagai runtimes, mereka masih kompatibel, itulah sebabnya teknologi seperti Portable Class Libraries berfungsi (untuk sebagian besar runtimes yang Anda daftarkan).

Misalnya, tidak boleh masing-masing referensi rasa perakitan tunggal, bersama disebut "System.Collections.dll", bukannya setiap runtime memiliki salinan System.dll / mscorlib.dll masing-masing dengan berbagai salinan koleksi?

Mengapa ini dibutuhkan? Selama semuanya kompatibel (sekali lagi, lihat Portable Class Libraries), ini seharusnya tidak masalah, karena BCL adalah bagian dari runtime itu sendiri, dan didistribusikan bersama-sama.

Reed Copsey
sumber
Tidakkah saya bisa menulis kelas yang hanya menggunakan List<T>dan menjalankannya di platform apa pun tanpa membuat perpustakaan portabel? Atau tidakkah seharusnya List<T>berada di perpustakaan portabel? Perpustakaan portabel bagiku terasa seperti solusi daripada bagian dari desain yang elegan.
Paul Stovell
1

.NET pada dasarnya mengganti dan memperluas objek com di lingkungan windows. Ini juga digunakan untuk mengidentifikasi banyak teknologi yang sangat berbeda, bayangkan jika Adobe mengganti nama semua produk mereka untuk memiliki kata yang sama dalam nama mereka, itu semacam apa yang terjadi dengan .NET

Ryathal
sumber