Teknoloji · Diller ve framework’ler

.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.

.NETOnunla neler geliştiriyoruz
01ASP.NET Core API’leri
02Framework’ten moderne geçiş
03İş kuralı yoğun back-end’ler
04Entegrasyon ve mesajlaşma
05EF Core ile veri erişimi
06Azure-native servisler
Genellikle birlikte
  1. C#
  2. ASP.NET Core
  3. EF Core
  4. MassTransit
  5. Kafka
  6. SQL Server
Neden kullanıyoruz

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.

Bununla ne geliştiriyoruz

.NET üzerinde hayata geçirdiğimiz altı şey.

01

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.

02

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.

03

İş 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.

04

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.

05

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.

06

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.

Uygunluk

Ne zaman tercih edilmeli.

Doğru tercih

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.

Başka yere bakın

Ü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.

Uygulamada

Bir minimal API endpoint’i, bizim yazdığımız haliyle.

Program.cscsharp
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();
Referans mimari

Bir .NET servis ortamının yerleşim düzeni.

Edge
Azure Front Door / API ManagementEntra IDHız sınırlama
Servisler
ASP.NET Core API’leriArka plan görevlerigRPC dahili çağrılarMassTransit / Kafka
Veri
SQL Server veya PostgreSQLRedisBlob depolama
Platform
AKS veya Container AppsGitHub ActionsOpenTelemetry → GrafanaKey Vault
Standartlarımız

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 .editorconfig ve sapma olduğunda başarısız olan bir build.
Tipik eşleşmeler

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
Genellikle şunlarla çalışır
C#ASP.NET CoreEF CoreMassTransitKafkaSQL ServerPostgreSQLAzureKubernetesOpenTelemetry
SSS

Sık sorulan sorular

Evet — genellikle bir Yazılım Modernizasyonu ya da Legacy Yeniden Yapılandırma programının içinde. Upgrade Assistant ve bir bağımlılık envanteriyle başlar, sonra dilim dilim ilerleriz: önce ortak kütüphaneler, sonra servisler, sonra arayüz; son dilim doğrulanana kadar her iki runtime da canlı kalır.
Varsayılan olarak evet. Modern .NET çapraz platformdur ve bir Linux container’ını işletmek Windows container’ına göre genellikle daha ucuz ve daha basittir. Windows barındırmayı yalnızca zorunlu bir bağımlılığın — bir COM bileşeni, legacy bir sürücü — dayattığı yerlerde sürdürür, ileride devre dışı bırakılabilmesi için de o bağımlılığı yazılı hale getiririz.
Hangisini hâlihazırda iyi işletiyorsanız o. EF Core ikisini de destekler ve her ikisi üzerinde de .NET servisleri geliştiririz. Sıfırdan seçim yapıyorsanız ve SQL Server’da kalmak için lisans kaynaklı bir nedeniniz yoksa genellikle PostgreSQL öneririz.
Evet. Kurumsal ortamlarda .NET ile Azure genellikle birlikte gelir; bu nedenle C# mühendislerimiz AKS, Container Apps, Service Bus, Key Vault ve Bicep ile rahatça çalışır. Altyapıyı DevOps & Cloud ekibimiz gözden geçirir.
Çoğu zaman daha iyi model budur. Ekip takviyesi, C# mühendislerini sizin süreçlerinizle ekibinizin içine yerleştirir; dedicated team ise bütün bir iş kolunu üstlenir. İkisi de yazılı bir brief ile başlar ve adı belli bir müşteri sorumlusuyla düzenli görüşmelerle sürer.
İlgili

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.

✓ Satış sunumu yok✓ AI-native bir mühendisten yanıt✓ Yazılı geri dönüş