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.