crazy_coder
Moderatör
- Katılım
- 20 Şub 2026
- Mesajlar
- 204
- Tepkime puanı
- 0
- Puanları
- 16
AutoMapper: Nesneler Arası Otomatik Dönüşüm Rehberi
AutoMapper, iki farklı nesne tipini birbirine bağlayan küçük ama çok güçlü bir kütüphanedir. Temel amacı, bir nesnedeki verileri alıp, benzer özelliklere sahip başka bir nesneye (genellikle DTO'lara) otomatik olarak kopyalamaktır.
1. Neden AutoMapper Kullanmalıyız?
Veritabanı modellerinizi doğrudan dış dünyaya açmak güvenlik ve mimari açısından risklidir. Bu yüzden DTO kullanırız. Ancak manuel eşleme (mapping) can sıkıcıdır:
Manuel Eşleme (İstenmeyen):
C#:
var urunDto = new UrunDto {
Ad = urun.Ad,
Fiyat = urun.Fiyat,
KategoriAd = urun.Kategori.Ad // Karmaşık eşleme
};
AutoMapper ile Eşleme (İdeal):
C#:
var urunDto = _mapper.Map<UrunDto>(urun);
[]Temiz Kod:** Kontrolcülerinizi (Controller) onlarca satır eşleme kodundan kurtarır.
[]Bakım Kolaylığı:** Eşleme kuralları tek bir merkezde (Profile) toplanır.
[*]Hata Denetimi:** Eksik veya yanlış eşlemeleri test etmenize olanak tanır.
2. Kurulum ve Profil Tanımlama
AutoMapper'ı kullanmak için öncelikle kurallarınızı belirlediğiniz bir Profile sınıfı oluşturmalısınız.
C#:
public class MappingProfile : Profile
{
public MappingProfile()
{
// Kaynak (Entity) -> Hedef (DTO)
CreateMap<Urun, UrunDto>()
// Eğer özellik isimleri farklıysa özel kural yazılabilir
.ForMember(dest => dest.KategoriIsmi, opt => opt.MapFrom(src => src.Kategori.Ad));
}
}
3. Dependency Injection ile Kayıt
Modern .NET uygulamalarında AutoMapper'ı Program.cs içerisinde sisteme tanıtmanız gerekir:
C#:
builder.Services.AddAutoMapper(typeof(MappingProfile));
4. Controller İçinde Kullanım
Artık IMapper arayüzünü enjekte ederek sınıflar arası dönüşümü tek satırda yapabilirsiniz.
C#:
public class UrunlerController : ControllerBase
{
private readonly IMapper _mapper;
public UrunlerController(IMapper mapper) { _mapper = mapper; }
[HttpGet]
public IActionResult Getir(int id)
{
var urun = _urunServis.GetirById(id);
// Entity'i otomatik olarak DTO'ya çeviriyoruz
var urunDto = _mapper.Map<UrunDto>(urun);
return Ok(urunDto);
}
}
AutoMapper vs Manuel Mapping
| Kriter | Manuel Mapping | AutoMapper |
|---|---|---|
| Hız (Çalışma) | En hızlı (doğrudan atama) | Hızlı (Reflection/Expression Tree kullanır) |
| Kod Kalabalığı | Çok fazla satır kaplar | Minimalist ve temiz |
| Hata Yönetimi | Derleme anında hata verir | Profil hataları çalışma anında fark edilir |
Sonuç
AutoMapper, özellikle büyük ölçekli ve çok katmanlı mimarilerde (N-Tier, Clean Architecture) hayat kurtarıcıdır. Nesnelerinizi "eşleme hamallığından" kurtararak iş mantığına odaklanmanızı sağlar. Ancak çok basit, tek bir sınıflık projelerde kullanmak gereksiz bir bağımlılık yaratabilir; ihtiyaca göre seçmek en doğrusudur.