.NET Standard Nedir ? Nasıl ve Neden Ortaya Çıktı?
Merhaba arkadaşlar bu yazımızda .NET Standard’ın ne olduğu, nasıl, neden çıktığını ve .NET platformları arasında ki önemini anlatmaya çalışacağım.
.NET Standard’ın Doğuşu
Öncelikle .NET platformları nelerdir? Bundan bahsetmek istiyorum.

Yukarıda ki listede gördüğümüz üzere birbirinden farklı ve güzel bir çok .NET platformu mevcuttur.
Bir çok uygulamayı .NET kullanarak geliştirebiliyoruz.
Peki bu kadar büyük bir yelpazede ki uygulamarın kullandığı ortak kodları nasıl paylaştıracağız?
Öncelikle ortak olması gereken kodlar nedir bir kaç tespit yapalım;
- Ortak bir Data Access katmanı olabilir. İçerisinde Repository, UnitOfWork gibi patternlerin kendimize göre düzenleyip yazdığımız
veya ORM (Entity Framework) kullandığımız. - Bussines katmanı olabilir. Uygulamanın tüm bussines işlemlerini yazacağımız ortak bir katman.
- Cross Cutting Concerns ( Logging , Caching ,Security vs.) gibi ihityaçlarımızın ortak bir standart da hazırlayıp kullandığımız.
Bu ihtiyaçları tek bir yerde hazırlayıp kullanmak isteriz. Ama bunları tüm .NET platformlarında kullabilir miyim sorusu akıllara geliyordur.
Evet bunu PCL(Portable Class Library) ve SAP(Shared Asset Project) gibi yöntemlerle yapabiliyorduk.
Bu yöntemler de Compiler Directive(#if) gibi platforma özel kodlar yazıyorduk.
Bu durum karmaşık kod yapısını ve yönetilmesi zor bir hali ortaya çıkarıyordu.
PCL ‘ler de birden çok uygulama arasında paylaşıldığında platform desteği azalmaktaydı.Her PCL profile her platformu destekleyemiyordu.
Bazı platformlarda (Xamarin , UWP gibi) popüler bir nuget projesini bile ekleyemez oluyorduk.
PCL Profile ve desteklediği PCL Platform listesini buradan görebilirsiniz.
Bu problemlerin ışığında Microsoft platformlar arası kod paylaşımına bir standart getirmeye karar verdi ve .NET Standard ‘ı hayatımıza kattı.
.NET Standard Nedir ?

Yukarıda 3 büyük .NET platformunu görüyoruz. Burada her platform için farklı BCL (Base Class Library) yapmak zorunda kalıyorduk.

.NET Standard ile birlikte Unified BCL(Base Class Library) sayesinde ortak kodlarımızı platformlar arasında paylaştırabiliyoruz.
.NET Standard artık tüm platformların implemente etmesi gerektiği bir Interface olarak düşünebiliriz.
Yani içerisinde bir çok API’yi barındıran tüm .NET platformlarını
birleştiren , ileride yeni çıkacak platformlar için de sorun teşkil etmeyecek bir Unified BCL (Base Class Library) olarak düşünebiliriz.
Bugün .NET Standard 2.1 ile 37.118 API kullanılabilir durumda.
Başlıca API’ler ise;

.NET Standard ile her geçen gün artan .NET Framework binary’leri referans alabileceğiz.
Son Olarak ;
.NET Standard için söylenen buradan aldığım bir metaforu paylaşmak istiyorum.
.NET Standard için implemente edilen bir Interface gibi düşünebiliriz demiştim.
.NET Platform’larını da .NET Standard’ı implemente eden concrete classlar olarak düşünebiliriz.
Öncelikle .Net Standard’ı görelim;

Burada incelediğimizde görüyoruz ki, .NET Standard versiyonları lineer bir şekilde gidiyor. Yani bir sonraki versiyon kendinden bir önceki versiyonu implement ediyor ve kendine özgü API’sini de kendi içerisinde belirtiyor.
Şimdi de .NET Framework ve .NET Core kısmını inceliyelim;

Burada da incelediğimiz de .NET Standard 2.0 ‘ın .NET Framework 4.6.1 tarafından tamamen implemente edildiğini , .NET Standard 1.6 ‘nın .NET Core tarafından , .NET Standard 2.0’ın .NET Core 2.0 tarafından implemente edildiğini görüyorsunuz. :)
Bu şekilde anlaşılması daha kolay oldu sanırım :)
Yazım burada sona erdi, umarım faydalı ve anlaşılır bir yazı olmuştur.
Sağlıklı günler dilerim :)
Yardımcı Kaynaklar ;
https://devblogs.microsoft.com/dotnet/introducing-net-standard/
https://github.com/dotnet/standard/blob/master/docs/faq.md
https://docs.microsoft.com/en-us/dotnet/standard/net-standard
https://blogs.msdn.microsoft.com/dotnet/2016/09/26/introducing-net-standard/
https://en.wikipedia.org/wiki/List_of_.NET_libraries_and_frameworks