Yazılım Mimarileri ve Tasarım Desenleri Üzerine

Asp.NET Core’da AutoMapper Kullanımı

Merhaba,

Bu içeriğimizde Asp.NET Core uygulamalarında, ViewModel nesnelerinin modellediği gerçekci model entityleri ile eşleştirilmesini dinamik bir şekilde sağlayan AutoMapper kütüphanesinin entegrasyonunu ve kullanımını inceleyeceğiz.

Makalemize ilk olarak hiç bilmeyenler için Viewmodel nesnesinin ne olduğunu açıklayarak başlayalım;

Viewmodel Nedir?

Viewmodel nesneleri, temelde iki farklı senaryoya karşı sorumluluk üstlenen ve biz geliştiricilerin işini kolaylaştıran operasyonel nesnelerdir.

Görüldüğü üzere ViewModel nesneleri, bu şekilde iki farklı senaryoya göre sorumluluk üstlenen model destekçisi nesnelerimizdir.

Ayriyetten ViewModel nesneleri;

vs. amaçlıda kullanılır.

AutoMapper Kütüphanesi Ne İşe Yarar?

ViewModel nesnesinin 1. senaryodaki sorumluluğuna karşı gerçek model ile viewmodel arasındaki eşleşmeleri otomatik bir şekilde sağlayabilmek için kullanılan bir kütüphanedir.

Şöyle ki, bir personelin sadece ad ve soyad bilgilerinden bir kayıt oluşturacaksak eğer ilgili verilerle eşleşecek bir viewmodel tasarlayarak post neticesinde gelen datayı bu viewmodel ile karşılayabiliriz. Lakin context üzerinden gerçek entity ile temas kurulabileceğinden dolayı viewmodelde ki verileri gerçek modele yani entitye aktarmamız gerekmektedir. İşte bu işlemi AutoMapper bizler yerine otomatik bir şekilde gerçekleştirmektedir.

Yukarıdaki ekran görüntüsünde viewmodel’de ki verileri manuel bir şekilde entitye aktarmış bulunmaktayız. Günün sonunda bu işlemi otomatik bir şekilde yapacak olan AutoMapper nesnesine bırakacağız.

AutoMapper Entegrasyonu

AutoMapper kütüphanesini aşağıdaki kod aracılığıyla projeye entegre edebilirsiniz;

Install-Package AutoMapper.Extensions.Microsoft.DependencyInjection

Kurulumu

Kütüphane entegrasyonundan sonra uygulamaya “Startup.cs” dosyasındaki “ConfigureServices” metodu içerisinden AutoMapper kütüphanesini servis olarak ekliyoruz.

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddAutoMapper();
        }

Kullanımı

AutoMapper kütüphanesini kullanabilmek için gerçek modeller(entity) ile oluşturulan viewmodeller arasındaki ilişki belirtilmelidir. Yani, hangi model hani viewmodelle eşleşecektir…

Eşleşme için AutoMapper kütüphanesinin “Profile” sınıfı kullanılmaktadır. Tüm eşleşme profillerini bu sınıf aracılığıyla gerçekleştirmekte ve uygulamaya bildirmekteyiz.
Örnek için aşağıdaki model ve viewmodelleri oluşturalım.
Gerçek modeller;

    public class Musteri
    {
        public int Id { get; set; }
        public int PersonelId { get; set; }
        public string Adi { get; set; }
        public string Sirketi { get; set; }
        virtual public Personel Personel { get; set; }
    }
    public class Personel
    {
        public int Id { get; set; }
        public string Adi { get; set; }
        public string Soyadi { get; set; }
        public string KullaniciAdi { get; set; }
        public string Sifre { get; set; }
        virtual public ICollection<Musteri> Musteriler { get; set; }
        virtual public ICollection<Satis> Satislar { get; set; }
    }
    public class Satis
    {
        public int Id { get; set; }
        public int PersonelId { get; set; }
        public string SatisNo { get; set; }
        virtual public Personel Personel { get; set; }
    }

ViewModeller;

    public class VMMusteri
    {
        public string Adi { get; set; }
        public string Sirketi { get; set; }
    }
    public class VMPersonel
    {
        public string Adi { get; set; }
        public string Soyadi { get; set; }
    }
    public class VMSatis
    {
        public string SatisNo { get; set; }
    }

“Profile” sınıfımız;

    public class MappingProfile : Profile
    {
        public MappingProfile()
        {
            CreateMap<Personel, VMPersonel>();
            CreateMap<VMPersonel, Personel>();
            CreateMap<Musteri, VMMusteri>();
            CreateMap<VMMusteri, Musteri>();
            CreateMap<Satis, VMSatis>();
            CreateMap<VMSatis, Satis>();
        }
    }

Yukarıdaki kod bloğuna dikkat ederseniz eğer “Profile” abstract sınıfından türettiğimiz “MappingProfile” isimli sınıfımız bizim için eşleştirme profillerini barındıracak sorumluluğu üstlenmektedir. İşlemleri kolaylık olması açısından ilgili sınıfın constructerında gerçekleştirmeyiz. “Profile” sınıfından gelen “CreateMap” metodu aracılığıyla eşleştirmeler yapılmaktadır. Burada özellikle dikkatinizi çekmek istediğim husus, her eşleştirmenin birde simetriğini sağlayarak tersine bir çevriminde söz konusu olacağı durumlarıda hesaba katmaktayız.

Kullanım;

Yukarıdaki ekran görüntüsünü incelerseniz eğer AutoMapper, Assembly’de ki “Profile” nesnesini bulmakta ve eşleştirmeler neticesinde arka planda reflection ile memberları check ederek aralarında verilsel transferi sağlamaktadır. Dolayısıyla bizleri ekstradan bir maliyetten kurtarmakta ve hızımıza hız katmaktadır. “VMPersonel” olarak gelen nesneyi AutoMapper kütüphanesinin nimetlerinden olan “IMapper” sınıfını kullanarak “Personel” sınıfına Map(eşleştirme) etmekteyiz. Bu durum diğer modeller ve viewmodeller içinde geçerliliğini koruyacaktır. Artık gerisini sizlerin deneyine bırakıyorum…

İlgilenenlerin faydalanması dileğiyle…
Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…

Exit mobile version