Mert Özen Her Satırda Daha İleri

Blog

Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.

Seriler
111 yazı bulundu
Bounded Context: Aynı Kelimenin Farklı Anlamları ve Model Sınırları
Yazılım Mimarisi SERİ 04

Bounded Context: Aynı Kelimenin Farklı Anlamları ve Model Sınırları

Bounded context, bir modelin ve dilinin geçerli olduğu açıkça çizilmiş sınırdır; "kitap" Catalog'da satıştaki eser, Inventory'de depodaki nüsha, Ordering'de satın alınan satır, Shipping'de koli olduğu için tek bir dev Book class'ı yerine dört model gerekir. Evans'ın tanımı, .NET'in Timer'larıyla CS0104, bounded context ile subdomain ve microservice farkı, boyutlandırma, Ordering için Bounded Context Canvas ve EF Core'da context başına schema.

7 Kas 2026 12 dk 11
Subdomain'ler: Core, Supporting ve Generic Ayrımıyla Yatırımı Doğru Yere Yapmak
Yazılım Mimarisi SERİ 03

Subdomain'ler: Core, Supporting ve Generic Ayrımıyla Yatırımı Doğru Yere Yapmak

Core subdomain şirketi rakiplerinden ayıran, karmaşık ve sık değişen parçadır ve en iyi ekiple zengin modelle yazılır; supporting basit tutulur, generic ise karmaşık olsa da satın alınır. Evans'ın Core Domain ve Generic Subdomains pattern'leri, Khononov'un ölçütleri, Bookstore'un sınıflaması, aynı uygulamada domain model, transaction script ve ince gateway, .NET'in kriptografiyi işletim sistemine bırakması ve subdomain ile bounded context farkı.

7 Kas 2026 11 dk 4
Ubiquitous Language: Domain Expert'le Aynı Dili Konuşan Kod
Yazılım Mimarisi SERİ 02

Ubiquitous Language: Domain Expert'le Aynı Dili Konuşan Kod

Ubiquitous language, bir bounded context içinde domain uzmanının ve developer'ların konuştuğu, class ve method adlarına birebir yansıyan tek ve kesin dildir: Status = 4 yerine order.Cancel(reason) ve RequestReturn. Belirsiz kelimeleri (ürün, durum, iade) ayrıştırmak, Türkçe konuşup İngilizce kod yazan ekip için çeviri sütunlu glossary, reflection ile glossary kontrolü ve HttpStatusCode'un RFC 9110 ile değişen dili.

7 Kas 2026 12 dk 7
Domain-Driven Design Nedir? Ne Zaman Değer, Ne Zaman Gereksiz?
Yazılım Mimarisi SERİ 01

Domain-Driven Design Nedir? Ne Zaman Değer, Ne Zaman Gereksiz?

DDD, karmaşıklığın teknolojide değil iş kurallarında olduğunu kabul edip modeli domain uzmanıyla birlikte koda taşıyan bir yaklaşımdır; kuralları sık değişen core domain'de değer üretir, CRUD ekranlarında ve kısa ömürlü MVP'lerde gereksizdir. Kampanya indirimi hatasıyla CRUD ve domain modelinin farkı, strategic ve tactical design ayrımı, eShop'un Ordering.Domain'i ve serinin yol haritası.

7 Kas 2026 12 dk 6
Vertical Slice Ne Zaman? Clean Architecture ve Modular Monolith ile Birlikte Kullanmak
Yazılım Mimarisi SERİ 06

Vertical Slice Ne Zaman? Clean Architecture ve Modular Monolith ile Birlikte Kullanmak

Vertical slice'lar sık feature eklenen, karmaşıklığı use case'e göre değişen API'lerde iyi çalışır; refactoring disiplini olmayan ekiplerde ve zengin, paylaşılan domain'lerde tek başına yetmez, en iyi sonucu Clean bir domain çekirdeği ve modular monolith sınırlarıyla birlikte verir. Bookstore'u module'lere ayırıp sınırı internal ve ArchUnitNET ile koruyor, FastEndpoints ile REPR'ı değerlendiriyor ve layered bir projeyi slice'lara kademeli taşıma planını çıkarıyoruz.

7 Kas 2026 11 dk 4
Vertical Slice'ları Test Etmek: Slice Başına Integration Test ve Gerektiğinde Unit Test
Yazılım Mimarisi SERİ 05

Vertical Slice'ları Test Etmek: Slice Başına Integration Test ve Gerektiğinde Unit Test

Bir slice'ın doğal test birimi HTTP isteğinden gerçek veritabanına kadar olan yoldur; domain kuralları ise saf unit test'le, ucuzca test edilir. WebApplicationFactory, Testcontainers ile gerçek SQL Server ve Respawn ile slice başına test kuruyor, sıfırlama olmadan test'lerin nasıl birbirini kırdığını ve InMemory provider'ın aynı arama sorgusunda hem yanlış geçip hem yanlış kaldığını gerçek çıktılarla gösteriyoruz.

7 Kas 2026 11 dk 3
Slice'lar Arası Paylaşım: Duplication mı Abstraction mı, Domain Logic Nereye?
Yazılım Mimarisi SERİ 04

Slice'lar Arası Paylaşım: Duplication mı Abstraction mı, Domain Logic Nereye?

Slice'lar arasında domain model, cross-cutting işler ve altyapı paylaşılır; request/response tipleri, sorgular ve iş akışı paylaşılmaz, invariant'lar ise ikinci kopyayı beklemeden entity'ye taşınır. Bookstore'da request'e konmuş bir kuralın 7 adetlik siparişe izin verdiğini, bir slice'ın başka bir slice'ı çağırınca ödemesi reddedilmiş siparişi kaydettiğini gerçek çıktılarla görüyor ve bunu ArchUnitNET slice test'iyle engelliyoruz.

7 Kas 2026 11 dk 4
Mediator'lı Slice: MediatR, Mediator (Source Generator) ve Wolverine Karşılaştırması
Yazılım Mimarisi SERİ 03

Mediator'lı Slice: MediatR, Mediator (Source Generator) ve Wolverine Karşılaştırması

Slice'larda mediator'ın asıl getirisi giriş noktasından bağımsız bir pipeline'dır; Kasım 2026 itibarıyla MediatR 14.3 RPL 1.5 ya da ticari lisanslı, Mediator 3.0.2 ve Wolverine 6.62 MIT lisanslı. Aynı PlaceOrder slice'ını üç araçla ve mediator'sız bir endpoint filter'la yazıp dispatch maliyetini, ilk istek süresini, Native AOT davranışını ve her aracın gerçek kurulum tuzaklarını karşılaştırıyoruz.

7 Kas 2026 15 dk 4
MediatR Olmadan İlk Slice: Minimal API, Handler Class ve Endpoint Kaydı
Yazılım Mimarisi SERİ 02

MediatR Olmadan İlk Slice: Minimal API, Handler Class ve Endpoint Kaydı

MediatR olmadan bir slice; request ve response record'ları, DbContext'i doğrudan kullanan bir handler class'ı ve endpoint'i kendi class'ında map eden bir IEndpoint ile kurulur, kayıtları da assembly scan yapar. Bookstore'da PlaceOrder ve GetOrderDetails slice'larını .NET 10 AddValidation, TypedResults ve EF Core projection ile yazıyor, adlandırma convention'ının bütün endpoint'leri nasıl düşürebildiğini ve bunun açılışta nasıl yakalanacağını gösteriyoruz.

7 Kas 2026 13 dk 5
Vertical Slice Architecture Nedir? Layer'a Değil Feature'a Göre Kod Organize Etmek
Yazılım Mimarisi SERİ 01

Vertical Slice Architecture Nedir? Layer'a Değil Feature'a Göre Kod Organize Etmek

Vertical Slice Architecture, kodu teknik layer'lara göre değil her request'in uçtan uca ihtiyacına göre dilimler; slice'lar arası coupling azalır, slice içi coupling artar. Aynı iki feature'ın layered Bookstore'da beş dosyada, slice'lı Bookstore'da tek dosyada conflict çıkardığını git çıktılarıyla görüyor, slice'ın anatomisini ve üç yaygın yanlış okumayı inceliyoruz.

7 Kas 2026 10 dk 4
Clean Architecture Ne Zaman Fazla Gelir? Template Kültü, Interface Patlaması ve Pragmatik Yol
Yazılım Mimarisi SERİ 09

Clean Architecture Ne Zaman Fazla Gelir? Template Kültü, Interface Patlaması ve Pragmatik Yol

Clean Architecture, korunacak iş kuralı olmayan CRUD ağırlıklı, kısa ömürlü ya da tek adapter'lı küçük servislerde fazla gelir; uzun ömürlü, kurallı ve çok adapter'lı bölgelerde ise karşılığını verir. Template kültü ve interface patlamasının belirtileri, aynı Dependency Rule'u tek project ve ArchUnitNET test'leriyle korumak, ve layered bir projeden FreezingArchRule ile kademeli geçiş.

7 Kas 2026 13 dk 11
Clean Architecture'ı Test Etmek ve Korumak: Core Test'leri, Adapter Test'leri ve Architecture Test'leri
Yazılım Mimarisi SERİ 08

Clean Architecture'ı Test Etmek ve Korumak: Core Test'leri, Adapter Test'leri ve Architecture Test'leri

Clean Architecture'da core'u in-memory adapter'larla veritabanı olmadan, adapter'ları Testcontainers ile üretimdeki SQL Server'a karşı test edersin; Dependency Rule'u ise ArchUnitNET kurallarıyla CI'da kırılmaz hale getirirsin. SQLite'ın gizlediği decimal hassasiyeti sorunu, derleyicinin yakalamadığı ihlaller, Types(true) olmadan hiçbir şey seçmeyen kural tuzağı ve NetArchTest'in 2021'den beri güncellenmediği notu.

7 Kas 2026 16 dk 8
Blog Haritası