Merhaba Arkadaşlar,
Bu makalemde son 2–3 projemde sıklıkla kullandığım AutoMapper kütüphanesinden bahsedeceğim. Peki nedir bu automapper ? Kendi sitesindeki tanımından yola çıkarak automapper 2 nesneyi birbirine eşleyen karmaşık koddan kurtulmak için oluşturulan basit bir kütüphanedir.
İlk olarak nasıl kurulduğundan bahsedip daha sonra iyi ve kötü örnekle bu makaleyi sonlandırmak istiyorum.
Kurulum işlemi için 2 seçenek mevcut.İlk olarak nuget package’dan automapper diye aratıp kurulumunu yapabilirsiniz.2.seçenek olarak install-package AutoMapper komutunu Package Manager Console’ dan çalıştırıp ilgili kütüphaneyi yükleyebilirsiniz.
Kurulum işlemini yaptık.Şimdi ilk olarak kötü bir örnekle başlayalım.
Bu örnekte mvc5 projesi ile bir partialview ile datayı gösterdiğimizi varsayalım.
Viewmodel class’ımız aşağıdaki gibi olacak.
public class TumEmirlerViewModel { public string UrunAlimSatimNo { get; set; } public double? Miktar { get; set; } public double? Fiyat { get; set; } public string AlimSatimTip { get; set; } public string UrunAdi { get; set; } public string AjanKisiNo { get; set; } public string AliciSaticiKisiNo { get; set; } public string UrunKodu { get; set; } public string BankaKodu { get; set; } public int Id { get; set; } public double? Toplam { get; set; } public double? SatimMiktari { get; set; } public double? SatimFiyati { get; set; } public string SatimTipi { get; set; } public double SatimToplami { get; set; } public string SatimKisiNo { get; set; } public string SatimBankasi { get; set; } public string ElusKodu { get; set; } }
Entity objemiz ise aşağıdaki gibi olsun.
public partial class VwGercEmirler { public string UrunKodu { get; set; } public string UrunAdi { get; set; } public Nullable<double> Miktar { get; set; } public Nullable<double> Fiyat { get; set; } public Nullable<double> Toplam { get; set; } public string AliciSaticiKisiNo { get; set; } public string AlimSatimTip { get; set; } public string BankaKodu { get; set; } public int Id { get; set; } public Nullable<double> SatimMiktari { get; set; } public Nullable<double> SatimFiyati { get; set; } public string SatimTipi { get; set; } public Nullable<double> SatimToplami { get; set; } public string SatimKisiNo { get; set; } public string SatimBankasi { get; set; } public string BorsaKodu { get; set; } }
Bu iki class’ı eşlerken automapper kullanmaz isek kod bloğumuz aşağıdaki şekilde olacaktı.
VwGercEmirler.Where(x=>x.AliciSaticiKisiNo==CurrentSession.User.KisiNo && x.AlimSatimTip=="1"). Select(x => new TumEmirlerViewModel { UrunKodu = x.UrunKodu, UrunAdi = x.UrunAdi, Miktar = x.Miktar, Fiyat = x.Fiyat, Toplam = x.Toplam, AliciSaticiKisiNo = x.AliciSaticiKisiNo, AlimSatimTip = x.AlimSatimTip, BankaKodu = x.BankaKodu, Id = x.Id }).ToList();
Yukarıdaki kod bloğubelki bir iki class için başınızı ağrıtmayacak ve zaman kaybettirmeyecektir.Ama proje büyüdükçe ciddi şekilde zaman kaybına ve kod karmaşıklığına sebebiyet vermektedir.
Şimdi aynı işlemi automapper ile yapalım ve aradaki farkı görelim.
Mapper.CreateMap<VwGercEmirler, TumEmirlerViewModel>(); var data3 = db.VwGercEmirler.Where(x=>x.AliciSaticiKisiNo==CurrentSession.User.KisiNo && x.AlimSatimTip=="1").ToList(); var tumEmirlerDto = Mapper.Map<TumEmirlerViewModel>(data3);
Gördüğünüz gibi autoMapper işimizi çok kolaylaştırıyor ve uzun uzun kod yazma zahmetinden bizi kurtarıyor.
Umarım automapper konusunda bir fikir verebilmişimdir. İyi çalışmalar.
https://github.com/AutoMapper/AutoMapper