Bagaimana perubahan kode dapat memengaruhi kompatibilitas
Kompatibilitas mengacu pada kemampuan untuk mengkompilasi atau menjalankan kode pada versi implementasi .NET selain yang kode awalnya dikembangkan. Perubahan tertentu dapat memengaruhi kompatibilitas dengan enam cara berbeda:
- Perubahan perilaku
- Kompatibilitas biner
- Kompatibilitas sumber
- Kompatibilitas waktu desain
- Kompatibilitas mundur
- Meneruskan kompatibilitas (bukan tujuan .NET Core)
Perubahan perilaku
Perubahan perilaku mewakili perubahan pada perilaku anggota. Perubahan mungkin terlihat secara eksternal (misalnya, metode dapat melemparkan pengecualian yang berbeda), atau dapat mewakili implementasi yang diubah (misalnya, perubahan dalam cara nilai pengembalian dihitung, penambahan atau penghapusan panggilan metode internal, atau bahkan peningkatan performa yang signifikan).
Ketika perubahan perilaku terlihat secara eksternal dan memodifikasi kontrak publik jenis, perubahan tersebut mudah dievaluasi karena memengaruhi kompatibilitas biner. Perubahan implementasi jauh lebih sulit dievaluasi; tergantung pada sifat perubahan dan frekuensi dan pola penggunaan API, dampak perubahan dapat berkisar dari parah hingga tidak berbahaya.
Kompatibilitas biner
Kompatibilitas biner mengacu pada kemampuan konsumen API untuk menggunakan API pada versi yang lebih baru tanpa kompilasi ulang. Perubahan seperti menambahkan metode atau menambahkan implementasi antarmuka baru ke jenis tidak memengaruhi kompatibilitas biner. Namun, menghapus atau mengubah tanda tangan publik perakitan sehingga konsumen tidak dapat lagi mengakses antarmuka yang sama yang diekspos oleh perakitan memang memengaruhi kompatibilitas biner. Perubahan semacam ini disebut perubahan biner yang tidak kompatibel.
Kompatibilitas sumber
Kompatibilitas sumber mengacu pada kemampuan konsumen API yang ada untuk melakukan kompilasi ulang terhadap versi yang lebih baru tanpa perubahan sumber apa pun. Perubahan sumber yang tidak kompatibel terjadi ketika konsumen perlu memodifikasi kode sumber agar berhasil dibangun terhadap versi API yang lebih baru.
Kompatibilitas waktu desain
Kompatibilitas waktu desain mengacu pada mempertahankan pengalaman waktu desain di seluruh versi Visual Studio dan lingkungan waktu desain lainnya. Meskipun ini dapat melibatkan perilaku atau UI perancang, aspek terpenting dari kompatibilitas waktu desain menyangkut kompatibilitas proyek. Proyek atau solusi harus dapat dibuka dan digunakan pada versi lingkungan waktu desain yang lebih baru.
Kompatibilitas mundur
Kompatibilitas mundur mengacu pada kemampuan konsumen API yang ada untuk berjalan terhadap versi baru sambil berperilaku dengan cara yang sama. Perubahan perilaku dan perubahan kompatibilitas biner memengaruhi kompatibilitas mundur. Jika konsumen tidak dapat menjalankan atau berperilaku berbeda saat berjalan terhadap versi API yang lebih baru, API tidak kompatibel mundur.
Perubahan yang memengaruhi kompatibilitas mundur tidak disarankan, karena pengembang mengharapkan kompatibilitas mundur dalam versi API yang lebih baru.
Meneruskan kompatibilitas
Kompatibilitas penerusan mengacu pada kemampuan konsumen API yang ada untuk berjalan terhadap versi yang lebih lama sambil menunjukkan perilaku yang sama. Jika konsumen tidak dapat menjalankan atau berperilaku berbeda saat dijalankan terhadap versi API yang lebih lama, API tidak kompatibel ke depan.
Mempertahankan kompatibilitas penerusan hampir menghalangi perubahan atau penambahan apa pun dari versi ke versi, karena perubahan tersebut mencegah konsumen yang menargetkan versi yang lebih baru berjalan di bawah versi sebelumnya. Pengembang mengharapkan bahwa konsumen yang bergantung pada API yang lebih baru mungkin tidak berfungsi dengan benar terhadap API yang lebih lama.
Mempertahankan kompatibilitas ke depan bukanlah tujuan .NET Core.