Kod değişiklikleri uyumluluğu nasıl etkileyebilir?
Uyumluluk , kodun ilk geliştirildiği sürüm dışında bir .NET uygulamasının sürümünde derleme veya yürütme özelliğini ifade eder. Belirli bir değişiklik uyumluluğu altı farklı şekilde etkileyebilir:
- Davranış değişikliği
- İkili uyumluluk
- Kaynak uyumluluğu
- Tasarım zamanı uyumluluğu
- Geriye dönük uyumluluk
- İletme uyumluluğu (.NET Core'un hedefi değil)
Davranış değişikliği
Davranışsal değişiklik, bir üyenin davranışında yapılan değişikliği temsil eder. Değişiklik dışarıdan görünebilir (örneğin, bir yöntem farklı bir özel durum verebilir) veya değiştirilmiş bir uygulamayı temsil edebilir (örneğin, dönüş değerinin hesaplanma biçimindeki bir değişiklik, iç yöntem çağrılarının eklenmesi veya kaldırılması, hatta önemli bir performans geliştirmesi).
Davranış değişiklikleri dışarıdan görünür olduğunda ve bir türün genel sözleşmesini değiştirdiğinde, ikili uyumluluğu etkiledikleri için bunların değerlendirilmesi kolaydır. Uygulama değişikliklerini değerlendirmek çok daha zordur; değişikliğin niteliğine ve API'nin kullanım sıklığına ve desenlerine bağlı olarak, değişikliğin etkisi ciddiden zararsıza kadar değişebilir.
İkili uyumluluk
İkili uyumluluk, bir API tüketicisinin API'yi yeniden derlemeden daha yeni bir sürümde kullanabilmesini ifade eder. Yöntem ekleme veya türe yeni arabirim uygulaması ekleme gibi değişiklikler ikili uyumluluğu etkilemez. Ancak, tüketicilerin derleme tarafından kullanıma sunulan arabirime erişemeyecek şekilde derlemenin ortak imzalarını kaldırmak veya değiştirmek ikili uyumluluğu etkiler. Bu tür bir değişiklik ikili uyumsuz bir değişiklik olarak kabul edilir.
Kaynak uyumluluğu
Kaynak uyumluluğu, bir API'nin mevcut tüketicilerinin herhangi bir kaynak değişikliği olmadan daha yeni bir sürümle yeniden derleme olanağını ifade eder. Bir tüketicinin api'nin daha yeni bir sürümüne göre başarıyla derlenmesi için kaynak kodunu değiştirmesi gerektiğinde kaynak uyumsuz bir değişiklik oluşur.
Tasarım zamanı uyumluluğu
Tasarım zamanı uyumluluğu, Visual Studio sürümleri ve diğer tasarım zamanı ortamlarında tasarım zamanı deneyimini korumayı ifade eder. Bu, tasarımcıların davranışını veya kullanıcı arabirimini içerse de, tasarım zamanı uyumluluğunun en önemli yönü proje uyumluluğuyla ilgilidir. Bir projenin veya çözümün tasarım zamanı ortamının daha yeni bir sürümünde açılabilmesi ve kullanılabilmesi gerekir.
Geriye dönük uyumluluk
Geriye dönük uyumluluk, bir API'nin mevcut tüketicisinin aynı şekilde davranırken yeni bir sürümde çalışabilmesini ifade eder. Hem davranış değişiklikleri hem de ikili uyumluluktaki değişiklikler geriye dönük uyumluluğu etkiler. Bir tüketici, API'nin daha yeni sürümünde çalışırken farklı şekilde çalıştıramaz veya farklı davranırsa, API geriye dönük olarak uyumsuzdur.
Geliştiriciler API'nin daha yeni sürümlerinde geriye dönük uyumluluk beklediğinden geriye dönük uyumluluğu etkileyen değişiklikler önerilmez.
İletme uyumluluğu
İleriye dönük uyumluluk, bir API'nin mevcut tüketicisinin aynı davranışı sergilerken eski bir sürümde çalıştırılabilmesini ifade eder. Bir tüketici, API'nin eski bir sürümünde çalıştırıldığında farklı çalıştıramaz veya farklı davranırsa, API ilet uyumsuzdur.
İleriye dönük uyumluluğun korunması, sürümden sürüme yapılan tüm değişiklikleri veya eklemeleri neredeyse engeller, çünkü bu değişiklikler daha sonraki bir sürümü hedefleyen bir tüketicinin önceki bir sürüm altında çalışmasını engeller. Geliştiriciler, daha yeni bir API'ye dayalı bir tüketicinin eski API'ye karşı düzgün çalışmayabileceğini bekler.
İleriye dönük uyumluluğu korumak .NET Core'un bir hedefi değildir.