Veri transfer nesneleri (DTO – Data Transfer Object), bir katmandan diğerine veri taşımak için kullanılan sade nesnelerdir. Genellikle controller'lar, API istek/yanıtları, servis sınıfları gibi yerlerde kullanılırlar. Peki C# 9.0 ile gelen record yapısı, DTO tanımı için neden class'a güçlü bir alternatiftir?
Bu yazıda record ve class ile DTO tanımı arasındaki farkları gerçek dünya senaryolarıyla ele alacağız.
class ile DTO:public class MusteriDto
{
public string Adi { get; set; }
public string TcNo { get; set; }
}
record ile DTO:public record MusteriDto(string Adi, string TcNo);
record, varsayılan olarak immutable (değiştirilemez) nesneler üretir. DTO’lar için birebir uyumludur.
ToString(), equals(), GetHashCode() Avantajlarıclass ile:ToString() → "Namespace.MusteriDto"equals() → Referans karşılaştırması yaparGetHashCode() → Referansa göre hash üretirrecord ile:ToString() → MusteriDto { Adi = Ali, TcNo = 123 }equals() → İçerik karşılaştırması yaparGetHashCode() → Alanlara göre hash hesaplarTestlerde ve loglamada, record ile elde edilen çıktılar çok daha anlamlıdır.
class:var m = new MusteriDto { Adi = "Ali", TcNo = "123" };
m.Adi = "Veli"; // değiştirilebilir
record:var m = new MusteriDto("Ali", "123");
var m2 = m with { Adi = "Veli" }; // yeni nesne oluşturur
Immutability, özellikle çoklu iş parçacıklı yapılarda ve geçmişe dönük veri kayıtlarında güvenlik sağlar.
with İfadesi ile Kolay Kopyalamavar musteri = new MusteriDto("Ali", "123");
var yeniMusteri = musteri with { TcNo = "456" };
class ile aynı şeyi yapmak daha uzun ve karmaşıktır.
| Senaryo | Tercih |
|---|---|
| API Request / Response DTO | ✅ record |
| CQRS Command / Query modelleri | ✅ record |
| Immutable veri kayıtları / Event log | ✅ record |
| UI ViewModel, değiştirilebilir nesne | ➖ class daha uygun |
class Kullanmalı?set ile değişiklik yapılacaksa,C# record, DTO tanımlamak için sade, güvenli ve modern bir çözümdür. Otomatik gelen equals, ToString, with gibi özellikleri sayesinde record, özellikle API geliştirme, CQRS mimarisi, unit testler ve immutable veri yönetimi gibi alanlarda class'a göre büyük avantaj sağlar.
🚀 Eğer DTO’n yalnızca veri taşıyorsa ve değiştirilmeyecekse, record en doğru seçimdir.
Hazır altyapın C# 9.0 ve üzerindeyse, yeni projelerinde record kullanarak kodunu hem sadeleştirebilir hem de daha güvenli hale getirebilirsin.