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 #yazilim-mimarisi
Ayrı Read Model: Materialized View, Senkronizasyon ve Eventual Consistency ile Yaşamak
Yazılım Mimarisi SERİ 03

Ayrı Read Model: Materialized View, Senkronizasyon ve Eventual Consistency ile Yaşamak

Ayrı read model, ekranın satırını domain event'lerinden önceden hesaplayıp saklamaktır; aynı transaction'da güncellenirse tutarlılık anlık kalır, ayrı bir veritabanında asenkron güncellenirse eventual consistency ile yaşamak gerekir. Inline projection, PostgreSQL materialized view, checkpoint'li asenkron projector, read-your-own-writes için position ile bekleme, idempotent update ve sıfırdan rebuild, gerçek çıktılarla.

7 Kas 2026 14 dk 4
Tek Veritabanında CQRS: Write Tarafında Aggregate, Read Tarafında Projection
Yazılım Mimarisi SERİ 02

Tek Veritabanında CQRS: Write Tarafında Aggregate, Read Tarafında Projection

Tek veritabanında CQRS, yazma tarafında aggregate'i EF Core'un change tracker'ıyla kaydedip okuma tarafında aynı tablolardan aggregate'e hiç dokunmadan projection yapmaktır. PlaceOrder ve CancelOrder command'larının ne döndürmesi gerektiği, ayrı ve düz bir read DbContext, SQL view üstünde Dapper ve query'nin state değiştirmediğini PostgreSQL'e read-only transaction ile söyletmek, gerçek SQL ve 25006 hatasıyla.

7 Kas 2026 14 dk 4
CQRS Nedir? CQS'ten Command Query Responsibility Segregation'a
Yazılım Mimarisi SERİ 01

CQRS Nedir? CQS'ten Command Query Responsibility Segregation'a

CQRS, tek bir modeli yazma (command) ve okuma (query) için iki ayrı modele bölmektir; Meyer'in method seviyesindeki CQS ilkesini Greg Young model seviyesine taşıdı. Aggregate'in liste ekranına neden uymadığını gerçek bir derleme hatası ve sayımla gösteriyor, CQRS'in üç seviyesini, Event Sourcing ve MediatR'dan farkını ve Fowler'ın 'yalnız gerektiği yerde' uyarısını işliyoruz.

7 Kas 2026 12 dk 5
DDD'nin Evrimi ve Yaygın Yanlışlar: Blue Book'tan Dynamic Consistency Boundary'ye
Yazılım Mimarisi SERİ 14

DDD'nin Evrimi ve Yaygın Yanlışlar: Blue Book'tan Dynamic Consistency Boundary'ye

DDD'nin en yaygın yanlışı, Blue Book'un sonunda kalan strategic design'ı atlayıp yalnızca entity, repository ve base class gibi tactical kelimeleri almaktır. Evans'ın 2003'teki kitabından DDD Reference'a, Vernon'ın aggregate kurallarına, EventStorming'e, Team Topologies ve Khononov'a, aggregate'i sorgulayan Dynamic Consistency Boundary'ye uzanan tarihçe; bellek içi bir DCB örneği ve seriden sonraki okuma rotası.

7 Kas 2026 13 dk 5
Uçtan Uca: Bookstore Ordering Context'ini Anemic CRUD'dan Zengin Modele Refactor Etmek
Yazılım Mimarisi SERİ 13

Uçtan Uca: Bookstore Ordering Context'ini Anemic CRUD'dan Zengin Modele Refactor Etmek

Anemic bir CRUD kodunu zengin modele taşımanın güvenli yolu, önce mevcut davranışı characterization test'lerle sabitleyip sonra dil, value object, aggregate sınırı, invariant ve domain event adımlarını her biri yeşil kalan ayrı commit'lerle atmaktır. Bookstore Ordering'i 11 commit'te dönüştürüyor, "3 al 2 öde" kampanyasıyla refactoring toward deeper insight'ı ve öncesi/sonrası metrikleri gerçek çıktılarla gösteriyoruz.

7 Kas 2026 19 dk 8
Domain Event'ler: Raise, Topla, SaveChanges'te Dispatch Et
Yazılım Mimarisi SERİ 12

Domain Event'ler: Raise, Topla, SaveChanges'te Dispatch Et

Aggregate olanı geçmiş zamanlı, immutable bir domain event olarak yalnızca kendi listesine ekler; EF Core 10'un SaveChangesInterceptor'ı event'leri SaveChanges sırasında toplar, aynı transaction'daki handler'ları commit'ten önce, veritabanı dışına çıkan yan etkileri commit'ten sonra çalıştırır. Mediator'sız dispatcher, iç içe SaveChanges ve açık transaction tuzakları gerçek çıktılarla; integration event ve outbox farkı.

7 Kas 2026 16 dk 8
Domain Service, Application Service ve Anemic Domain Model
Yazılım Mimarisi SERİ 11

Domain Service, Application Service ve Anemic Domain Model

Davranış önce sahibi olan entity'ye ya da value object'e gider; hiçbirine doğal olarak ait olmayan, stateless bir domain hesabı domain service olur, yükleme-kaydetme-transaction ise ince bir application service'te kalır. Bookstore'da kopyalanmış kargo kuralını anemic service'lerden Order'a ve ShippingFeeCalculator'a taşıyıp policy, factory ve domain service'e repository inject etme tuzağını gerçek çıktılarla gösteriyoruz.

7 Kas 2026 17 dk 7
Aggregate Tasarımı: Consistency Boundary, Küçük Aggregate'ler ve Id ile Referans
Yazılım Mimarisi SERİ 09

Aggregate Tasarımı: Consistency Boundary, Küçük Aggregate'ler ve Id ile Referans

Aggregate, gerçek invariant'ları tek bir transaction'da tutarlı tutan bir consistency boundary'dir; dışarıdan yalnızca root'a, diğer aggregate'lere de yalnızca id ile referans verilir. Vernon'un dört kuralını Bookstore'un Order ve StockItem aggregate'lerine uyguluyor, navigation property'nin katalog fiyatını sessizce değiştirdiği gerçek bir EF Core çıktısını, stok için eventual consistency'yi, 'kimin işi?' sorusunu ve Aggregate Design Canvas'ı işliyoruz.

7 Kas 2026 10 dk 4
Always-Valid Domain Model: Invariant'ları Constructor, Factory ve Guard'larla Korumak
Yazılım Mimarisi SERİ 08

Always-Valid Domain Model: Invariant'ları Constructor, Factory ve Guard'larla Korumak

Always-valid domain model, invariant'ların kaydetmeden önce kontrol edilmesi değil, ihlal edilmesinin imkânsız olmasıdır: private constructor, static factory ve guard clause'lar geçersiz state'e giden her yolu kapatır. Bookstore'un Order'ında en az bir satır, kitap başına 10 adet, tek para birimi ve tek kupon kurallarını; required/init ve C# 14 field'ın sınırlarını, domain exception ile Result ayrımını ve input validation ile invariant farkını gerçek çıktılarla işliyoruz.

7 Kas 2026 12 dk 7
Entity ve Value Object: Identity, Equality ve C# record ile Immutable Modeller
Yazılım Mimarisi SERİ 07

Entity ve Value Object: Identity, Equality ve C# record ile Immutable Modeller

Entity'yi zaman içinde süren kimliği, value object'i ise yalnızca değeri tanımlar: iki Money aynı tutar ve para birimindeyse aynıdır, iki Order ise Id'leri aynıysa. C# record ve readonly record struct ile Money, Isbn ve strongly typed id'ler yazıyor, EF Core 10'un owned type yerine önerdiği complex type'larla map'liyor ve record'daki collection, struct default'u ve with tuzaklarını gerçek çıktılarla gösteriyoruz.

7 Kas 2026 14 dk 8
EventStorming ile Domain'i Keşfetmek: Big Picture'dan Aggregate'lere
Yazılım Mimarisi SERİ 06

EventStorming ile Domain'i Keşfetmek: Big Picture'dan Aggregate'lere

EventStorming, domain'de olan biteni geçmiş zamanlı turuncu sticky'lerle bir timeline'a dizerek domain expert ile developer'ları aynı dilde buluşturan bir workshop formatıdır. Bookstore'un sipariş akışını Big Picture, Process Modeling ve Software Design seviyelerinden geçirip hot spot'ları, pivotal event'leri, policy'leri ve duvardan çıkan aggregate adaylarını koda döküyoruz.

7 Kas 2026 12 dk 6
Context Mapping: Anti-Corruption Layer, Open Host Service ve Bounded Context'ler Arası İlişkiler
Yazılım Mimarisi SERİ 05

Context Mapping: Anti-Corruption Layer, Open Host Service ve Bounded Context'ler Arası İlişkiler

Context map, bounded context'ler arasındaki ilişkileri hem teknik hem organizasyonel olarak adlandırır: upstream/downstream, Partnership, Shared Kernel, Customer/Supplier, Conformist, Anti-Corruption Layer, Open Host Service, Published Language, Separate Ways ve Big Ball of Mud. Bookstore'un context map'i, eski kargo sisteminin SOAP/XML modelini Shipping'e çeviren test'li bir ACL, versiyonlu bir Published Language ve Shared Kernel'in Common.dll'e dönüşme tuzağı.

7 Kas 2026 13 dk 3
Blog Haritası