.NET, işinizi bugün yürüten sistemler için.
ASP.NET Core servisleri, Entity Framework veri katmanları ve Windows’tan Linux’a modernizasyon — Microsoft ağırlıklı kurulu ortamlarda o ortamla boğuşmadan çalışan AI-native C# mühendisleri.
- C#
- ASP.NET Core
- EF Core
- MassTransit
- Kafka
- SQL Server
Pek çok kuruluşta hâlihazırda bir .NET ortamı var.
Bankacılık, sigorta, üretim ve kamu sektöründeki pek çok büyük kuruluşta hâlihazırda bir .NET ortamı var: altında SQL Server, çevresinde Active Directory ve içinde yıllardır biriken iş kuralları. Bu ortamın bulunduğu yerlerde .NET kullanırız; çünkü daha iyi bir sisteme giden en doğrudan yol, genellikle kurumunuzun hâlihazırda güvendiği ekibi, araçları ve veri platformunu koruyan yoldur.
Modern .NET, bu ortamların çoğunun üzerine kurulduğu .NET Framework’ten farklı bir platformdur. Linux üzerinde çalışır, container olarak dağıtılır ve hızlı başlar. C# ise record’lar, pattern matching ve derleme zamanında bütün bir hata kategorisini yakalayan nullable reference type’larla kesin ve anlatımı güçlü bir dile dönüştü. Bizim kullandığımız .NET budur.
Kullanmadığımız durumlar: ekibin, barındırmanın ve işe alım havuzunun hep birlikte TypeScript ya da Go’yu işaret ettiği sıfırdan ürünlerde .NET’e yönelmeyiz; ince ve gecikmeye duyarlı edge katmanı için de önermeyiz. Ancak bir kurum uçtan uca Microsoft-native ise, başka bir şey seçmek çoğunlukla yenilik uğruna bedel ödemektir.
.NET üzerinde hayata geçirdiğimiz altı şey.
ASP.NET Core API’leri
İlk endpoint’ten itibaren OpenAPI sözleşmeleri, sürümleme, hız sınırlama ve yapılandırılmış problem-details hataları içeren minimal API’ler ve controller tabanlı servisler.
Framework’ten moderne geçiş
.NET Framework 4.x uygulamalarının Linux container’ları üzerinde güncel .NET’e taşınması — WCF’ten gRPC ya da REST’e, Web Forms’tan Razor’a veya React arayüze, System.Web bağımlılıkları tek tek devre dışı bırakılarak.
İş kuralı yoğun back-end’ler
Değerin kurallarda olduğu poliçe yönetimi, hasar, kayıt defteri ve fiyatlandırma motorları. İş alanını açıkça modeller ve framework’ten bağımsız tutarız.
Entegrasyon ve mesajlaşma
MassTransit ya da doğrudan Kafka istemcileri, Azure Service Bus, outbox desenleri ve idempotent tüketiciler — olay tabanlı ortamların arkasındaki tesisat.
EF Core ile veri erişimi
Entity Framework Core: migration’lar sürüm kontrolünde, gerektiği yerde derlenmiş sorgular ve EF’in yazmaması gereken raporlar için yanında Dapper.
Azure-native servisler
Bicep veya Terraform ile birbirine bağlanan Container Apps, AKS, Functions, Key Vault ve Managed Identity — Azure ekibimizle birlikte gözden geçirilir.
Ne zaman tercih edilmeli.
Kurumunuz zaten SQL Server, Active Directory ya da Entra ID ve Azure kullanıyorsa; biz ayrıldıktan sonra sistemi işletecek bir C# ekibiniz varsa; iş yükü, yoğun iş mantığı barındıran ve katı tiplemenin kendini amorti ettiği uzun ömürlü bir iş back-end’i ise; ya da bir .NET Framework uygulamasının baştan yazılmadan modern ve container’a alınmış bir servise dönüşmesi gerekiyorsa .NET’i seçin.
Ürün, Next.js ile headless bir CMS’in daha az merasimle hallettiği içerik ağırlıklı bir web arayüzüyse; altyapı araçları için çok küçük ve çok hızlı ikili dosyalara ihtiyacınız varsa ki buraya Go daha iyi oturur; ya da veri bilimi ve ML çalışmalarınız zaten Python tarafındaysa ve servis bunun etrafındaki ince bir katmansa başka bir yere bakın.
Bir minimal API endpoint’i, bizim yazdığımız haliyle.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<ClaimsDb>(o => o.UseNpgsql(cs));
builder.Services.AddOpenTelemetry().WithTracing(t => t.AddAspNetCoreInstrumentation());
var app = builder.Build();
// One handler, one query, typed result — no controller boilerplate
app.MapGet("/claims/{id:guid}", async (Guid id, ClaimsDb db, CancellationToken ct) =>
await db.Claims.AsNoTracking().FirstOrDefaultAsync(c => c.Id == id, ct) is { } claim
? Results.Ok(claim.ToDto())
: Results.Problem(statusCode: 404, title: "Claim not found"))
.WithName("GetClaim").Produces<ClaimDto>().ProducesProblem(404);
+ app.MapHealthChecks("/healthz");
app.Run();Bir .NET servis ortamının yerleşim düzeni.
Teslim ettiğimiz .NET kod tabanlarında bulunanlar.
- Nullable reference type’lar ve uyarıların hata sayılması en baştan açıktır — ilk kod incelemesini derleyici yapar.
- Üç seviyede test: xUnit birim testleri, Testcontainers içindeki gerçek bir veritabanına karşı çalışan WebApplicationFactory entegrasyon testleri ve her genel API için küçük bir sözleşme test seti.
- Varsayılan olarak gözlemlenebilirlik: correlation ID’li OpenTelemetry izleri, metrikleri ve yapılandırılmış logları, platform ekibinizin hâlihazırda kullandığı sisteme aktarılır.
- Health ve readiness endpoint’leri gerçek bağımlılıkları yansıtır; böylece Kubernetes ve yük dengeleyiciler dürüst kararlar verir.
- Güvenlik temeli: bağlantı dizeleri yerine Managed Identity, Key Vault’ta tutulan sırlar, CI’da bağımlılık taraması ve her incelemede OWASP kontrolleri.
- Performans bütçeleri endpoint başına belirlenir, CI’da k6 ile ve yayına alındıktan sonra gerçek trafikle ölçülür — bir kıyas blogundan tahmin edilmez.
- Sürüm kontrolü altındaki EF Core migration’ları, canlı ortamda elle değil, CI hattı tarafından uygulanır.
- Roslyn analizörleri ve biçimlendirme zorunludur — StyleCop ya da yerleşik analizörler, repoda bir
.editorconfigve sapma olduğunda başarısız olan bir build.
Kodun yanında genellikle teslim edilenler.
- Domain, application ve infrastructure projeleri arasında belgelenmiş bağımlılık yönüne sahip solution yapısı
- Servisi kullanan ekipler için OpenAPI spesifikasyonu ve üretilmiş istemciler
- Test, tarama, build ve ortam terfisi aşamalarını içeren CI/CD hattı
- Servisin bağımlı olduğu Azure veya AWS kaynakları için kod olarak altyapı
- Runbook: devreye alma, geri alma, panolar ve birilerini uyandıran alarmlar
- Modernizasyon çalışması için geçiş kayıt defteri — ne taşındı, ne devre dışı bırakıldı, ne hâlâ eski runtime üzerinde ve neden
Sık sorulan sorular
Komşu teknoloji yığınları ve onları kullanan hizmetler.
Mevcut sisteminize saygı duyan C# mühendisleri.
Bugün ne çalışıyor ve neyin değişmesi gerekiyor, bize anlatın. Bir mühendis okur ve nasıl yaklaşacağımızı yazılı olarak iletir.