".NET Core, modern uygulamalar geliştirmek için güçlü ve çok yönlü bir framework haline geldi. Geliştirici olarak karşılaştığım birçok kütüphane, üretkenliğimi ve iş kalitemi önemli ölçüde artırdı. "
Bu yazıda, .NET Core geliştirme sürecimi kolaylaştıran ve vazgeçilmez hale gelen favori kütüphanelerimi paylaşacağım.
.NET Core ekosistemindeki en sevdiğim araçlardan biri Riok.Mapperly. Bu kütüphane, nesne eşleştirmeleri oluşturmak için tasarlanmış bir kaynak üreteci. Geleneksel eşleştirme kütüphanelerinin çalışma zamanında yansıtma kullanmasına karşın, Mapperly eşleştirme kodunu derleme zamanında oluşturur. Bu, performansı artırarak yükü önemli ölçüde azaltır.
Mapperly'nin ürettiği kod, temiz ve anlaşılırdır; bu da eşleştirmeleri doğrulamayı veya hata ayıklamayı kolaylaştırır. Elde edilen kodu görsel olarak inceleyebilmek, her şeyin beklendiği gibi çalıştığından emin olmanızı sağlar.
Mapperly ile başlamak için NuGet paketini projenize ekleyin:
dotnet add package Riok.Mapperly
Ardından, eşleyicinizi kısmi bir sınıf olarak tanımlayıp [Mapper]
niteliğiyle süsleyin. Mapperly, bildiriminize dayalı olarak gerekli eşleştirme yöntemlerini otomatik olarak oluşturacaktır:
[Mapper]
public partial class ArabaMapper
{
public partial ArabaDto ArabaToArabaDto(Araba araba);
}
Bu eşleyiciyi kullanarak, üretilen yöntem derleme zamanında eşleştirme işlemini gerçekleştirecektir:
var mapper = new ArabaMapper();
var araba = new Araba { KoltukSayısı = 10, ... };
var dto = mapper.ArabaToArabaDto(araba);
Console.WriteLine(dto.KoltukSayısı); // Çıktı: 10
Mapperly, verimlilik ve sadelik sunarak, karmaşık modeller ve dönüşümlerle çalışan geliştiriciler için mükemmel bir ek olur.
Bir diğer vazgeçilmez araç FluentValidation. Bu kütüphane, akıcı bir arayüz ve lambda ifadeleri kullanarak güçlü tipte doğrulama kuralları tanımlamaya olanak tanır. FluentValidation, sağlam ve sürdürülebilir doğrulama mantığı oluşturmayı kolaylaştırarak, kod tabanınızı karmaşadan uzak tutar.
FluentValidation’ı NuGet üzerinden kolayca yükleyebilirsiniz:
dotnet add package FluentValidation
Doğrulama kuralları oluşturmaya başlamak için AbstractValidator<T>
sınıfından türetilirsiniz; burada T
, doğrulamak istediğiniz modeldir. Her özellik için akıcı bir API kullanarak kurallar tanımlayabilirsiniz:
public class MüşteriValidator : AbstractValidator<Müşteri>
{
public MüşteriValidator()
{
RuleFor(x => x.Soyad).NotEmpty();
RuleFor(x => x.Ad).NotEmpty().WithMessage("Lütfen bir isim belirtin");
RuleFor(x => x.İndirim).NotEqual(0).When(x => x.HasDiscount);
RuleFor(x => x.Adres).Length(20, 250);
RuleFor(x => x.PostaKodu).Must(BeAValidPostcode).WithMessage("Lütfen geçerli bir posta kodu belirtin");
}
private bool BeAValidPostcode(string postcode)
{
// Özel doğrulama mantığı buraya
}
}
Bir modeli doğrulamak için, doğrulayıcıyı örnekleyip Validate
yöntemini çağırabilirsiniz:
var müşteri = new Müşteri();
var validator = new MüşteriValidator();
ValidationResult results = validator.Validate(müşteri);
if (!results.IsValid)
{
// Doğrulama hatalarını yönetme
foreach (var failure in results.Errors)
{
Console.WriteLine(failure.ErrorMessage);
}
}
FluentValidation, kuralları açık ve öz bir şekilde ifade etmenizi sağlayarak, sürdürülebilir doğrulama yapmanız için mükemmel bir araçtır.
.NET Core geliştirmemde çok faydalı bulduğum bir diğer kütüphane FluentResults. Bu kütüphane, başarı ve başarısızlığı daha öngörülebilir bir şekilde, fonksiyonel bir biçimde ele almanızı sağlar; akış kontrolü için istisnalara ihtiyaç duymaz. FluentResults, genellikle fonksiyonel programlamada görülen bir modeli benimser; burada yöntemler, başarı veya başarısızlık durumunu belirten bir sonuç nesnesi döner.
FluentResults'ı yüklemek için NuGet üzerinden ekleyebilirsiniz:
dotnet add package FluentResults
FluentResults ile basit ve sezgisel bir şekilde başarı veya başarısızlık belirtebilirsiniz:
// Başarı sonucu
Result successResult = Result.Ok();
// Hata sonucu
Result errorResult = Result.Fail("Bir sorun oluştu.");
Değer döndüren yöntemler için, o değeri bir sonuç nesnesinde saklayabilirsiniz:
// Değerle başarı sonucu
Result<int> successResult = Result.Ok(42);
// Değerle hata sonucu
Result<int> errorResult = Result.Fail<int>("Değeri almakta başarısız oldu");
Sonuç nesnesine sahip olduğunuzda, başarı veya başarısızlık durumunu kolayca kontrol edebilir ve hataları yönetebilirsiniz:
Result<int> result = SomeOperation();
if (result.IsFailed)
{
// Hatalı ise
foreach (var error in result.Errors)
{
Console.WriteLine(error.Message);
}
}
else
{
// Başarılı ise
int value = result.Value;
Console.WriteLine($"İşlem, değer ile başarılı: {value}");
}
FluentResults, ayrıntılı hata mesajları sunmanın yanı sıra, özel hata ve başarı nesneleri tasarlamanıza da olanak tanır, bu da onu .NET Core uygulamalarında dayanıklı hata yönetimi için ideal bir araç haline getirir.
Serilog, .NET Core için en popüler ve esnek günlük kaydı kütüphanelerinden biridir. Temiz bir API ile tasarlanmış olup, her .NET uygulamasına yapılandırılmış günlük kaydı eklemeyi kolaylaştırır. Serilog'un yapılandırılmış olay verilerini desteklemesi, olaylar hakkında detaylı ve bağlam zengin bilgileri kaydetmenizi sağlar; bu, karmaşık sistemlerin hata ayıklanmasında ve izlenmesinde son derece faydalıdır.
Serilog'u yüklemek için gerekli paketleri NuGet üzerinden ekleyebilirsiniz:
dotnet add package Serilogdotnet add package Serilog.Sinks.Console dotnet add package Serilog.Sinks.File
Serilog'u şu şekilde kolayca yapılandırabilirsiniz:
Log.Logger = new LoggerConfiguration()
.WriteTo.Console()
.WriteTo.File("log.txt", rollingInterval: RollingInterval.Day)
.CreateLogger();
Log.Information("Merhaba, Serilog!");
Bu örnek, mesajları hem konsola hem de döngüsel bir dosyaya kaydeder. Serilog'un mesaj şablonları, yapılandırılmış verileri yakalamanıza olanak tanır:
var position = new { Latitude = 25, Longitude = 134 };
var elapsedMs = 34;
Log.Information("İşlem {@Position} süresince {Elapsed} ms", position, elapsedMs);
Burada @
sembolü, Serilog'a Position
nesnesini yapılandırılmış JSON formatında serileştirmesini belirtir; bu, günlüklerin sorgulanmasını ve analiz edilmesini kolaylaştırır.
Yapılandırılmış günlük kaydı, Serilog'un en güçlü yönüdür. Sadece metin kaydetmekle kalmaz, olaylar hakkında zengin veriler toplar, bu da daha derin içgörüler ve sorgulanabilirlik sağlar. Serilog, dosya çıktıları, konsol, veritabanları, bulut hizmetleri ve daha fazlasını içeren birçok çıkış desteği sunarak, her tür .NET uygulaması için çok yönlü bir günlük kaydı aracı haline gelir.
Quartz.NET, geliştiricilerin .NET uygulamalarında görevleri planlayıp yönetmelerini sağlayan sağlam bir açık kaynaklı görev zamanlama kütüphanesidir. Belirli aralıklarla işler çalıştırmanız, arka planda işlem yapmanız veya zaman tabanlı görevler yürütmeniz gerekiyorsa, Quartz.NET, kurumsal düzeyde zamanlama için en iyi çözümdür.
Quartz.NET'i yüklemek için NuGet paketini ekleyebilirsiniz:
Bir sonraki hyazıda görüşmek üzere...