.Net Core Eğitimleri

5-) Dto Katmanı ve AutoMapper

Dto Katmanı

Bu derste entitylerimiz ile veritabanından aldığımız verileri aktaracağımız ve ekleme,silme,güncelleme işlemleri öncesi verileri tutacağımız “Dto” katmanımızı oluşturacağız ve AutoMapper ‘ı projemize dahil edeceğiz. “Data transfer object” ler içlerinde business kod bulundurmazlar görevleri sadece verileri taşımak ve geçici olarak saklamaktır. Şimdi “Solution Explorer” içinden “Dto” projemize sağ tıklayalım “Add –> Class” diyerek yeni bir sınıf oluşturalım ve “OrganizationDto” olarak isimlendirelim. Artık yeni dosya oluşturma ekranlarını eklemeye gerek görmüyorum ancak bu konuda takıldığınız bir durum olur ise önceki derslere dönerek ekran görüntülerine bakabilirsiniz.

Dto Sınıflarının Oluşturulması

“Common” projesini oluştururken hazırladığımız “DtoBase” sınıfı oluşturduğumuz tüm “Dto” sınıfları için “base class” görevi görecek yani tüm “Dto” larımız bu sınıftan kalıtım alacak. “DtoBase” sınıfı “Common” projesi altında bulunduğu için “Dto” projemize sağ tıklayarak “Add –> Reference” diyoruz ve açılan pencereden “Common” projesini seçerek ekliyoruz. “OrganizationDto.cs” dosyasına çift tıklayarak içini aşağıdaki şekilde değiştiriyoruz.

Sırası ile aynı yönetmi uygulayarak “CustomerDto, LanguageDto, AppResourceDto, ApplicationRoleDto, ApplicationUserDto, ApplicationUserRoleDto” sınıflarınıda Dto projesine ekleyelim ve içeriklerini aşağıdaki gibi güncelleyelim.

CustomerDto.cs

LanguageDto.cs

AppResourceDto.cs

ApplicationRoleDto.cs

ApplicationUserDto.cs

ApplicationUserRoleDto.cs

AutoMapper

Dto ları ekledikten sonra sıra geldi AutoMapper alt yapısını oluşturmaya. Data katmanında eklediğimiz entityler daha öncede bahsettiğimiz gibi üzerlerinde CRUD işlemler yapmak için oluşturuldu. Görevleri sadece veritabanımızda bulunan tablolarımızı temsil etmek, yani son ana kadar bu sınıflara erişmek istemiyoruz, doğrudan bu katmana bir manipülasyon olmasını tercih etmiyoruz, araya Dto katmanını ekleyerek uygulama içerisinde aksiyon anına gelene kadar (Database gönderilecek CRUD komutları) verileri bu katman üzerinde tutacağız. Bu katmandaki sınıflar olabildiğince basit ve hiç bir şekilde business içermiyor. Peki her seferinde Dto to Entity ya da tam tersi Entity to Dto arasında veri akışını manuel mi kodlayacağız? Eğer hayatımızda AutoMapper çözümleri olmasaydı maalesef her bir sınıf içerisinde tekrar tekrar bu transferleri kodlayacaktık. Birde herhangi bir entitynin değiştiğini düşündüğünüzde bu durum kod yönetimini ve test odaklı yazılım geliştirme döngüsünün olmazsa olmaz refactoring aşamasını olumsuz etkileyecek bir hal alacaktı.

AutoMapper Nasıl Çalışır?

Kodların içerisinde bulunan yorumlarda da yazdığım gibi eğer entity ve dto sınıflarımızın property isimleri ve valueType ları aynı olur ise AutoMapper bu properylerin birbirine eşit olduğunu anlıyor ve hemen iki property arasında kaynak(source) –> hedef(target) ilişkisine göre veri transferi gerçekleştiriyor. Peki property isimleri aynı olmazsa ne oluyor? Burada da devreye AutoMapper’ın profile sınıfı altında bulunan genişletme kodları giriyor. Hedef ve kaynak arasında birbirine eşit propertyleri tek tek tanımlayarak bir mapping oluşturmuş oluyorsunuz ve isimleri aynı olmasa dahi bu iki propertyi maplediğiniz için veri transferi gerçekleşiyor. Herhangi bir property nin aktarılmasını istemiyorsanız ya da aktarılması esnasında değer içinde değişiklik yapmak istiyorsanız yine profile sınıfı içinde genişleme kodları ile bu işlemleri yapabilirsiniz.

AutoMapper Projeye Nasıl Eklenir?

Şimdi AutoMapper’ı projemize eklemek için aşağıdaki ekran görüntüsünde olduğu gibi Dto projemize sağ tıklayacağız ve Manage Nuget Packages diyerek nuget paket yöneticisini açacağız.

AutoMapper paketinin projeye eklenmesi - Mehmet Ali EROL
AutoMapper paketinin projeye eklenmesi

Daha sonra karşımıza gelen ekranda aşağıdaki adımları takip ederek projemize AutoMapper paketini dahil edeceğiz.

AutoMapper paketinin projeye eklenmesi 2 - Mehmet Ali EROL
AutoMapper paketinin projeye eklenmesi 2

AutoMapper Profile ile Mapleme

Bu işlemleri doğru bir şekilde yaptığımızda artık projemize AutoMapper’ı dahil ettik ve bu paketin altında bulunana Profile sınıfını kalıtım alan bir MappingProfile oluşturabiliriz.
Bunun için Dto projesine bir klasör ekliyoruz ve adına Mapper diyoruz (Bu klasörü oluşturmak zorunlu değil ben diğer sınıflardan ayrı bir yerde durmasını istediğim için bu klasörü açtım). Daha sonra bu klasöre sağ tıklayarak “Add –> Class” diyoruz ve oluşturacağımız sınıfın adına MappingProfile yazarak kaydediyoruz. Mapping yapabilmek için Dto projesine Data projesini referans vermeliyiz. Hemen Dto projesine sağ tıklayarak “Add –> Reference” diyoruz ve açılan pencereden Data projesini işaretleyerek kaydediyoruz. Son durumda Dto projemiz hem Common hem de Data projelerine bağımlı hale geldi.

MappingProfile.cs dosyasına çift tıklayarak içerisini aşağıdaki şekilde güncelliyoruz.

Sonuç

Dto ve AutoMapper işlemleri sonrası Solution Explorer Görüntüsü - Mehmet Ali EROL
Dto ve AutoMapper işlemleri sonrası Solution Explorer Görüntüsü

Bu işlemleri yaptığımızda artık Dto katmanımız ve AutoMapper alt yapımız hazır hale geliyor. İşlemleri doğru bir şekilde yaptı ise Solution Explorer üzerinde aşağıdaki gibi bir görüntü görüyor olmalıyız.

Projenin son haline github sayfam üzerinden bu link ile erişebilir ve buraya kadar yaptığımız işlemleri kontrol edebilirsiniz.

<- Önceki Post – Sonraki Post ->

.Net Core Eğitimleri

1) .Net Core Nedir?

.Net Core

.Net Core, Microsoft ‘un açık kaynak kodlu olarak piyasaya sürdüğü bir “framework” tür.

Core öncesinde Microsoft tabanlı ortamlarda geliştirdiğiniz uygulamaları başka platformlar üzerinde koşturmak ya mümkün değildi ya da ekstra uygulamalar ve yöntemler gerektiriyordu. Microsoft, .Net Core ile birlikte bu sorunu ortadan kaldırmakla kalmadı aynı zamanda .Net Framework ile çalışırken karşılaşılan çeşitli sorunları da temizledi diyebiliriz. Örneğin dependency injection yapmak için Core öncesinde 3. parti çözümler kullanmak ve bir sürü ayar yapmak gerekebiliyordu ama artık Core içerisinde dependency injection gibi daha pek çok hayat kurtaran özellik gömülü bir şekilde geliyor. Olay sorunların giderilmesi ile sınırlı kalmıyor, bunların yanında performans üzerinde ciddi iyileştirmeler yapılmış ve tabi tüm bu iyileşmenin altında açık kaynak kod topluluğunun ciddi bir etkisi olduğunu söylemek gerekiyor. Bu link ile önceki sürümler ve .Net Core arasında performans karşılaştırmalarına göz atabilirsiniz.

Artık microsoft tabanlı bir işletim sistemi kullanmadan, visual studio geliştirme ortamına ihtiyaç duymadan gerekli geliştirmeleri yapabilir ve geliştirdiğiniz uygulamaları yine microsoft platformlarına bağımlı kalmaksızın başka ortamlarda çalıştırabiliriz. Core ‘un sürümlerine, sürümler içerisinde ne gibi farklılıkların bulunduğuna Microsoft’un sitesinden bakabilir ve gelişimi detaylıca görebilirsiniz.

Kısaca .Net Core’un temel özelliklerinden bahsettik, fazla detaya girerek gereksiz bilgiler vermek istemiyorum, daha detaylı bilgiye sahip olmak isteyenler mutlaka Microsoft’un sitesinden araştırma yapmalı ve gelinen son noktayı tecrübe etmeli.

Yazı Serisinin Amacı

Bu eğitim adım adım kurumsal bir backend projesinin nasıl yapılacağı ile ilgili bilgi vermek amacı ile hazırlanmıştır. Projeyi en baştan ekran görüntüleri ile birlikte oluşturacağız ve aşağıdaki özellikleri içerecek şekilde tamamlayarak hep birlikte yayına alacağız. Daha sonrasında angular 6 ile frontend tarafında geliştirmeler yapacağız. Ancak o başka bir ders konusu altında olacak. Aşağıda bulunan adımları içeren örnek projeyi bugün itibari ile bitirdim fakat yazıları yazmak ve yayınlamak biraz vaktimi alacak, bu nedenle eğer aşağıda bulunan konulardan herhangi birine ihtiyacınız var ise benimle iletişime geçebilirsiniz, örnek kodları sizinle paylaşabilirim.

Projenin Tanıtımı

Proje Adımları;
1- )    Projemizin oluşturulması ve gereklilikler
2- )    Projenin ana bilgilerini saklayacak common katmanının oluşturulması
3- )    .Net Core Identity ‘nin aktif hale getirilmesi ve code first ile veritabanı tasarımı
4- )    Data Transfer Object (Dto) ‘ların oluşturulması ve Auto Mapper
5- )    Repository ve UnitofWork tasarım desenlerinin eklenmesi
6- )    Web Api projesinin oluşturulması
7- )    ILogger ile dosya sistemine loglama ve AutoHistory ile değişiklik geçmişi
8- )    Usermanager ve Rolemanager ile Identity üzerinde kullanıcı işlemleri
9- )    Jwt token alt yapısı ile kullanıcı authentication alt yapısının kurulması
10- ) Rol bazlı authorization işlemleri
11- ) Web cache kullanımı ve projeye implemente edilmesi
12- ) Web api üzerinde paging alt yapısının kurulması
13- )  SignalR ile canlı veri akışının sağlanması
14- )  Unit testlerin yazılması ve Moq kullanımı
15- ) Swagger

<- Önceki Post – Sonraki Post ->