Altbilgi içeriğine atla
.NET YARDıM

Automapper C# (Geliştiriciler İçin Nasıl Çalışır)

Automapper, karmaşık nesne modelleri arasında veri iletimini daha kolay ve bakımı daha uygun hale getirerek nesneden nesneye haritalamayı kolaylaştırmak için tasarlanmış C#'ta çok yönlü ve güçlü bir kütüphanedir. Bu makalede, Automapper'ın özellikleri nasıl verimli bir şekilde eşleyeceğini, karmaşık nesne modellerini nasıl düzleştireceğini ve kullanıcı etki alanı nesneleri ve veri aktarım nesneleri gibi çeşitli nesne türleriyle nasıl çalışacağını keşfedeceğiz.

Automapper'a Giriş

C# dilinde Automapper, veri varlıkları ile veri aktarım nesnelerine (DTO'lar) dönüşümünü içeren senaryolarda özellikle yararlı olan, farklı nesne türleri arasında dönüştürmeyi ve veri iletimini basitleştiren bir nesne-nesne haritalayıcıdır.

Automapper'ın Ana Özellikleri

  • Kodun Basitleştirilmesi: Automapper, özellikleri haritalayarak manuel kod ihtiyacını büyük ölçüde azaltır, böylece hataları önler ve zaman kazandırır.
  • Haritalama Konfigürasyonlarında Esneklik: Automapper, geniş bir yelpazede haritalama senaryolarına uyum sağlayarak detaylı yapılandırma özelleştirmesine olanak tanır.
  • Performans Verimliliği: Kütüphane, büyük ve karmaşık nesne modellerini önemli bir performans yükü olmadan işleme yeteneğine sahiptir.

Automapper ile Başlarken

Automapper kullanmak için, öncelikle yazılım paketlerinin yönetimini kolaylaştıran geliştirme ortamının bir bileşeni olan paket yöneticisi konsolu üzerinden yüklenmesi gerekir.

Paket Yöneticisi Konsolu Üzerinden Kurulum

Paket yöneticisi konsolunda basit bir komut yürüterek, projenize Automapper'ı kolayca yükleyebilirsiniz:

Install-Package AutoMapper

Temel Haritalama Konfigürasyonu Ayarlama

Automapper kullanmanın temel aşaması, haritalama konfigürasyonunu tanımlamaktır. Bu, giriş nesnesi (kaynak) özelliklerinin çıkış nesnesine (hedefe) nasıl aktarılacağını belirtmekle ilgilidir.

var config = new MapperConfiguration(cfg => 
{
    cfg.CreateMap<SourceClass, DestinationClass>();
});
IMapper mapper = config.CreateMapper();
var config = new MapperConfiguration(cfg => 
{
    cfg.CreateMap<SourceClass, DestinationClass>();
});
IMapper mapper = config.CreateMapper();
Dim config = New MapperConfiguration(Sub(cfg)
	cfg.CreateMap(Of SourceClass, DestinationClass)()
End Sub)
Dim mapper As IMapper = config.CreateMapper()
$vbLabelText   $csharpLabel
  • Yukarıdaki örnekte, SourceClass'dan DestinationClass'a özellikleri eşlemek için bir eşleme yapılandırması oluşturulur.
  • Ardından bu yapılandırmayı kullanarak IMapper'in bir örneği oluşturulur.

Automapper ile İleri Haritalama Teknikleri

Automapper'ın yetenekleri, basit özellikten özellik haritalamayarak çok daha ötesine uzanır. Daha karmaşık senaryoları da ustalıkla yönetebilir.

Karmaşık Nesne Modellerini Düzleştirme

Automapper'ın güçlü yönlerinden biri, karmaşık nesne modellerini düzleştirme yeteneğidir. Bu özellik, iç içe geçmiş nesnelerle uğraşırken özellikle faydalıdır, bu iç içe geçmiş özellikleri düz bir hedef sınıf yapısına eşlemeye olanak tanır.

Çok Yönlü Nesne Türü Yönetimi

Automapper, kullanıcı etki alanı nesneleri, DTO'lar ve hatta görünüm modelleri de dahil olmak üzere çeşitli nesne türleri arasında eşleştirme yaparken ustaca çalışabilir, farklı veri aktarım ihtiyaçları için çok yönlü bir çözüm sunar.

Pratik Kullanım Örnekleri

Automapper'ın faydalılığını daha iyi anlamak için bazı pratik örnekler inceleyelim.

Örnek 1: Basit Haritalama

Kullanıcı varlığından kullanıcı DTO'suna özellikleri eşlememiz gereken bir senaryoyu düşünün:

public class User
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Address { get; set; }
    public string City { get; set; }
}

public class UserDTO
{
    public string FullName { get; set; }
    public string Address { get; set; }
    public string City { get; set; }
}

// Mapping Configuration
var config = new MapperConfiguration(cfg =>
{
    cfg.CreateMap<User, UserDTO>()
       .ForMember(dest => dest.FullName, opt => opt.MapFrom(src => src.FirstName + " " + src.LastName));
});
IMapper mapper = config.CreateMapper();
User user = new User { FirstName = "John", LastName = "Doe", Address = "123 Street", City = "CityName" };
UserDTO userDto = mapper.Map<UserDTO>(user);
public class User
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Address { get; set; }
    public string City { get; set; }
}

public class UserDTO
{
    public string FullName { get; set; }
    public string Address { get; set; }
    public string City { get; set; }
}

// Mapping Configuration
var config = new MapperConfiguration(cfg =>
{
    cfg.CreateMap<User, UserDTO>()
       .ForMember(dest => dest.FullName, opt => opt.MapFrom(src => src.FirstName + " " + src.LastName));
});
IMapper mapper = config.CreateMapper();
User user = new User { FirstName = "John", LastName = "Doe", Address = "123 Street", City = "CityName" };
UserDTO userDto = mapper.Map<UserDTO>(user);
Public Class User
	Public Property FirstName() As String
	Public Property LastName() As String
	Public Property Address() As String
	Public Property City() As String
End Class

Public Class UserDTO
	Public Property FullName() As String
	Public Property Address() As String
	Public Property City() As String
End Class

' Mapping Configuration
Private config = New MapperConfiguration(Sub(cfg)
	cfg.CreateMap(Of User, UserDTO)().ForMember(Function(dest) dest.FullName, Function(opt) opt.MapFrom(Function(src) src.FirstName & " " & src.LastName))
End Sub)
Private mapper As IMapper = config.CreateMapper()
Private user As New User With {
	.FirstName = "John",
	.LastName = "Doe",
	.Address = "123 Street",
	.City = "CityName"
}
Private userDto As UserDTO = mapper.Map(Of UserDTO)(user)
$vbLabelText   $csharpLabel
  • Bu örnek, User ve UserDTO arasında eşleme yapmayı gösterir, burada UserDTO'daki FullName, User'dan alınan FirstName ve LastName'nin birleştirilmesidir.

Örnek 2: Karmaşık Nesneler ile İleri Düzey Haritalama

Daha karmaşık bir senaryoda, iç içe geçmiş kullanıcı bilgilerine sahip bir sipariş nesnesini basitleştirilmiş bir sipariş DTO'suna eşleyelim:

public class Order
{
    public User OrderedBy { get; set; }
    // Other properties...
}

public class OrderDTO
{
    public string FullName { get; set; }
    // Other properties...
}

// Mapping Configuration
var config = new MapperConfiguration(cfg =>
{
    cfg.CreateMap<Order, OrderDTO>()
       .ForMember(dest => dest.FullName, opt => opt.MapFrom(src => src.OrderedBy.FirstName + " " + src.OrderedBy.LastName));
});
IMapper mapper = config.CreateMapper();
Order order = new Order { OrderedBy = new User { FirstName = "Jane", LastName = "Doe" } };
OrderDTO orderDto = mapper.Map<OrderDTO>(order);
public class Order
{
    public User OrderedBy { get; set; }
    // Other properties...
}

public class OrderDTO
{
    public string FullName { get; set; }
    // Other properties...
}

// Mapping Configuration
var config = new MapperConfiguration(cfg =>
{
    cfg.CreateMap<Order, OrderDTO>()
       .ForMember(dest => dest.FullName, opt => opt.MapFrom(src => src.OrderedBy.FirstName + " " + src.OrderedBy.LastName));
});
IMapper mapper = config.CreateMapper();
Order order = new Order { OrderedBy = new User { FirstName = "Jane", LastName = "Doe" } };
OrderDTO orderDto = mapper.Map<OrderDTO>(order);
Public Class Order
	Public Property OrderedBy() As User
	' Other properties...
End Class

Public Class OrderDTO
	Public Property FullName() As String
	' Other properties...
End Class

' Mapping Configuration
Private config = New MapperConfiguration(Sub(cfg)
	cfg.CreateMap(Of Order, OrderDTO)().ForMember(Function(dest) dest.FullName, Function(opt) opt.MapFrom(Function(src) src.OrderedBy.FirstName & " " & src.OrderedBy.LastName))
End Sub)
Private mapper As IMapper = config.CreateMapper()
Private order As New Order With {
	.OrderedBy = New User With {
		.FirstName = "Jane",
		.LastName = "Doe"
	}
}
Private orderDto As OrderDTO = mapper.Map(Of OrderDTO)(order)
$vbLabelText   $csharpLabel
  • Bu örnek, iç içe geçmiş OrderedBy detaylarını içeren bir Order nesnesinden düz bir OrderDTO'ya eşleme yapmayı gösterir ve kullanıcı adlarını tek bir FullName özelliğinde birleştirerek çıkartır.

Versiyon 9.0 ile, AutoMapper statik bir API'den (Mapper.Initialize) örnek tabanlı bir API'ye geçmiştir. Bu değişim, esnekliği artırır ve özellikle bağımlılık enjeksiyonunu kullanan modern uygulamalar için daha uygun hale gelir. Eğer 9.0'dan eski sürümlerle çalışıyorsanız, statik API yaklaşımı uygulanabilir. Ancak, daha yeni sürümler için, yukarıdaki örneklerde açıklandığı gibi, örnek tabanlı API'yi benimsemek önerilir.

Iron Software Suite Genel Bakış

Iron Software Suite .NET için, her biri belirli bir amaca hizmet eden bir dizi kütüphane ile güçlü bir pakettir. PDF oluşturmak, okumak ve düzenlemek, HTML'yi PDF'ye dönüştürmek ve görüntüleri birden fazla dilde metne işlemek gibi işlevleri kapsar. Bu süit, çeşitli geliştirme ihtiyaçlarına cevap verir, herhangi bir C# projesine çok yönlü bir ekleme yapar.

Iron Software Suite Ana Bileşenleri

  1. PDF Yönetimi için IronPDF: Bu bileşen, geliştiricilerin PDF'leri oluşturmasını, okumasını, düzenlemesini ve imzalamasını sağlar. Ayrıca, web tabanlı verilerden raporlar veya belgeler oluştururken özellikle kullanışlı olabilecek HTML'yi PDF'ye dönüştürme yeteneğini de sunar.

Automapper C# (Geliştiriciler İçin Nasıl Çalışır): Şekil 1 - IronPDF for .NET: C# PDF Kütüphanesi

  1. Excel Dosyası İşleme için IronXL: IronXL, Excel dosyalarıyla çalışma sırasında Office Interop'a ihtiyaç duymadan veri işleme ve analiz işleri yaparken işleri düzene sokar.

Automapper C# (Geliştiriciler İçin Nasıl Çalışır): Şekil 2 - IronXL for .NET: C# Excel Kütüphanesi

  1. Metin Çıkartma için IronOCR: Görüntülerden metin çıkartmayı sağlar ve bu da onu uluslararası projeler için son derece çok yönlü hale getiren 125 dili destekler.

Automapper C# (Geliştiriciler İçin Nasıl Çalışır): Şekil 3 - IronOCR for .NET: C# OCR Kütüphanesi

  1. QR ve Barcode Desteği için IronBarcode: Envanter yönetimi, takibi ve diğer ilgili görevleri geliştiren, QR kodları ve barkodları okuma ve yazma işlevselliğine olanak tanıyan bir kütüphane.

Automapper C# (Geliştiriciler İçin Nasıl Çalışır): Şekil 4 - IronBarcode for .NET: C# Barcode Kütüphanesi

Automapper ile Tamamlayıcılık

Her ne kadar Automapper, C#'da farklı nesne modelleri arasındaki özellikleri eşlemede mükemmel olsa da, Iron Software'ın Kütüphaneleri çeşitli veri format ve türlerini işlemek için araçlar sunarak işlevselliği genişletir. Örneğin, bir kullanıcı domain nesnesini bir DTO'ya dönüştürdükten sonra, IronPDF kullanılarak PDF formatında kapsamlı bir rapor oluşturulabilir. Benzer şekilde, Automapper kullanılarak çıkarılan veya dönüştürülen veriler, Excel dosya işlemleri için IronXL kullanılarak daha fazla işlenebilir veya analiz edilebilir.

Sonuç

Automapper C# geliştiricileri için nesneler arasında harita yapma görevini kolaylaştıran değerli bir araçtır. Özellik haritalamada, karmaşık nesne modellerini yönetmede ve özelleştirilebilir haritalama yapılandırmaları sunarak yazılım geliştirme sürecinde etkin bir araç olarak esastır. Nesne modellerinin inceliklerini anlamak ve Automapper'ın belirli ihtiyaçlara göre nasıl yapılandırılabileceğini bilmek, herhangi bir projede potansiyelini en üst düzeye çıkarmak için önemlidir.

Iron Software'ın Iron Suite çeşitli lisans seçenekleri sunar ve farklı proje ihtiyaçlarını karşılamak için Iron Software'in ücretsiz deneme sürümü içerir. Lisansları Lite, Plus ve Professional olarak katmanlanmıştır, farklı takım boyutlarına hitap eder ve kapsamlı destek özellikleri sunar. Automapper ile bu paketi entegre etmek, C# projelerini büyük ölçüde geliştirebilir, veri işleme ve doküman manipülasyonu yetenekleri ekler.

Sıkça Sorulan Sorular

C#'ta farklı nesne türleri arasında özellikleri verimli bir şekilde nasıl eşleyebilirim?

C#'ta farklı nesne türleri arasındaki özelliklerin haritalanmasını otomatikleştirmek için Automapper kullanabilirsiniz. Bir yapılandırma tanımlayarak, kaynak nesne özelliklerinin hedef nesnelere nasıl eşleneceğini belirleyebilirsiniz, bu da manuel kodlamayı azaltır ve hataları en aza indirir.

Automapper ile C#'ta iç içe geçmiş nesneleri ele alma süreci nedir?

Automapper, karmaşık nesne modellerini düzleştirebilir, bu sayede iç içe geçmiş özellikleri düz bir hedef yapıya eşlemenize olanak tanır. Bu özellik, özellikle iç içe geçmiş nesneleri basitleştirilmiş veri aktarım nesnelerine (DTO'lar) dönüştürmek için faydalıdır.

C#'ta nesne eşlemesini PDF ve Excel dosya işlemleri ile nasıl entegre edebilirim?

Nesne özelliklerini haritalamak için Automapper kullandıktan sonra, Iron Software'in IronPDF ve IronXL gibi kütüphaneleri kullanarak PDF ve Excel formatlarında raporlar oluşturabilir veya verileri işleyebilirsiniz, bu da C# projelerinizin veri işleme yeteneklerini arttırır.

Modern uygulamalarda bağımlılık enjeksiyonu ile Automapper kullanmanın avantajları nelerdir?

Sürüm 9.0'da, Automapper bir örnek tabanlı API'ye geçerek bağımlılık enjeksiyonu kullanan modern uygulamalarla esnekliği ve uyumluluğu artırır, bu da daha dinamik ve ölçeklenebilir eşleme yapılandırmaları sağlar.

Automapper, DTO'lar ve alan nesneleri gibi farklı nesne modelleri için haritalama yapabilir mi?

Evet, Automapper, kullanıcı alan nesneleri ve veri transfer nesneleri (DTO'lar) dahil olmak üzere çeşitli nesne modelleri arasında haritalama yapmak üzere tasarlanmıştır, bu da C# uygulamalarında farklı veri transfer ihtiyaçları için çok yönlülük sunar.

Bir C# projesinde Automapper ile çalışmaya başlamak için hangi adımlar gereklidir?

Bir C# projesinde Automapper kullanmaya başlamak için, Install-Package AutoMapper komutunu kullanarak paket yöneticisi konsolu üzerinden kurun. Ardından, nesne modelleriniz arasındaki otomatik haritalama sürecini tanımlamak için haritalama yapılandırmaları belirleyin.

Jacob Mellor, Teknoloji Direktörü @ Team Iron
Teknoloji Direktörü

Jacob Mellor, Iron Software'de Baş Teknoloji Yöneticisidir ve C# PDF teknolojisinde öncü bir mühendisdir. Iron Software'ın ana kod tabanının ilk geliştiricisi olarak, CEO Cameron Rimington ile birlikte şirketin ürün mimarisini 50'den fazla kişilik bir şirkete dönüştürmüştür ...

Daha Fazla Oku

Iron Destek Ekibi

Haftada 5 gün, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara