Jadi, saya bekerja di .Net. Saya membuat proyek open source di .Net. Salah satu masalah terbesar saya dengan itu tidak wajib dengan. Net, tetapi dengan komunitas dan kerangka kerja di sekitarnya. Tampaknya di mana-mana skema dan string penamaan magis diperlakukan sebagai cara terbaik untuk melakukan semuanya. Pernyataan berani, tetapi lihatlah:
ASP.Net MVC:
Halo rute dunia:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
Apa artinya ini adalah bahwa ASP.Net MVC entah bagaimana akan mencari HomeController
di kode Anda. Entah bagaimana, buat instance baru darinya, dan kemudian panggil fungsi tersebut Index
dengan id
parameter. Dan kemudian ada hal-hal lain seperti:
RenderView("Categories", categories);
...or..
ViewData["Foobar"]="meh";
Dan kemudian ada hal-hal serupa dengan XAML juga. DataContext
diperlakukan sebagai objek dan Anda harus berharap dan berdoa agar itu sesuai dengan jenis yang Anda inginkan. DependencyProperties harus menggunakan string ajaib dan konvensi penamaan sulap. Dan hal-hal seperti ini:
MyData myDataObject = new MyData(DateTime.Now);
Binding myBinding = new Binding("MyDataProperty");
myBinding.Source = myDataObject;
Meskipun lebih mengandalkan casting dan berbagai dukungan runtime ajaib.
Bagaimanapun, saya mengatakan semua itu untuk berakhir di sini: Mengapa ini bisa ditoleransi dengan baik di dunia .Net? Bukankah kita menggunakan bahasa yang diketik secara statis untuk hampir selalu tahu apa jenisnya? Mengapa refleksi dan tipe / metode / properti / nama apa pun (sebagai string) lebih disukai dibandingkan dengan generik dan delegasi atau bahkan pembuatan kode?
Apakah ada alasan bawaan yang saya lewatkan untuk mengapa sintaksis routing ASP.Net bergantung hampir secara eksklusif pada refleksi untuk benar-benar menyelesaikan cara menangani rute? Saya benci ketika saya mengubah nama metode atau properti dan tiba-tiba hal-hal rusak, tetapi tampaknya tidak ada referensi untuk metode atau properti itu dan tentu saja tidak ada kesalahan kompiler. Mengapa kenyamanan nyata dari string sihir dianggap "layak"?
Saya tahu ada juga alternatif yang diketik secara statis untuk beberapa hal, tetapi mereka biasanya mengambil kursi belakang dan sepertinya tidak pernah ada di tutorial atau materi pemula lainnya.
sumber
var
.Jawaban:
Sebenarnya ada dorongan kembali di dunia .NET terhadap hal-hal yang Anda sebutkan ini. Pada contoh pertama yang Anda berikan, mesin perutean diberikan konvensi untuk memetakan rute default. Fakta bahwa rutenya dinamis membuatnya hampir tidak mungkin untuk menggunakan konfigurasi statis.
Anda juga menyebutkan XAML / WPF, keduanya sedang dalam pengembangan jauh sebelum obat generik diperkenalkan. NET dan kembali ke dukungan obat generik akan menunda produk yang sudah sangat terlambat (Longhorn / Vista) lebih jauh.
Ada contoh dalam kerangka ASP.NET MVC menggunakan ekspresi lambda sebagai pengganti string ajaib dan Kerangka Entitas / LINQ membawanya lebih jauh di mana bahasa dan kerangka kerja menyediakan dukungan asli untuk menyusun pertanyaan SQL di atas grafik objek statis (alih-alih membangun string SQL ajaib, Anda mendapatkan waktu kompilasi validasi dari pertanyaan Anda).
Untuk contoh lain dari konfigurasi statis, lihat structuremap dan wadah injeksi ketergantungan modern lainnya, dan kerangka kerja lain yang perlu memeriksa grafik objek saat runtime tetapi memungkinkan pengembang untuk secara statis memberikan petunjuk menggunakan ekspresi lambda.
Jadi jawaban singkatnya adalah bahwa secara historis, .NET tidak mendukung traversal statis suatu objek grafik hingga rilis 3.5. Sekarang kita memilikinya, banyak pengembang lebih suka daripada string ajaib dan banyak yang mendorong untuk dukungan yang lebih dalam seperti operator simbolOf yang bekerja mirip dengan operator typeOf.
sumber