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
Persistence Ignorance ve Infrastructure Adapter'ları: EF Core, HttpClient ve Dış Servisler
Yazılım Mimarisi SERİ 07

Persistence Ignorance ve Infrastructure Adapter'ları: EF Core, HttpClient ve Dış Servisler

Persistence ignorance, domain class'larının hangi veritabanına ve ORM'e yazıldığından habersiz kalmasıdır; EF Core'da mapping'i IEntityTypeConfiguration ile Infrastructure'da tutarsın, ama constructor binding ve getter-only property'ler gibi kurallar domain'in şeklini yine de etkiler. Kargo firmasının API'sini typed HttpClient ile bir driven adapter'a sarmak, dış modeli içeri sızdırmamak ve generic repository ile IQueryable tuzağı.

7 Kas 2026 14 dk 5
Application Layer ve Use Case'ler: MediatR Olmadan Handler, Validation ve Transaction Sınırı
Yazılım Mimarisi SERİ 06

Application Layer ve Use Case'ler: MediatR Olmadan Handler, Validation ve Transaction Sınırı

Application layer'da her use case tek amaçlı bir handler class'ıdır: input validation Web'de, iş kuralı Domain'de kalır, beklenen hatalar Result ile döner ve tek bir SaveChanges transaction sınırını çizer. Scrutor ile decorator'larla cross-cutting işleri MediatR'sız eklemek ve MediatR'ın 13.0.0 sonrası lisans durumu.

7 Kas 2026 16 dk 9
Clean Architecture: Dependency Rule, Use Case'ler ve Sınırı Geçen Veri
Yazılım Mimarisi SERİ 04

Clean Architecture: Dependency Rule, Use Case'ler ve Sınırı Geçen Veri

Clean Architecture'ın (Martin, 2012) tek kuralı Dependency Rule'dur: kaynak kod dependency'leri yalnız içe bakar ve sınırı entity ya da veritabanı satırı değil, iç çemberin ihtiyacına göre sade bir veri yapısı geçer. Bookstore'da dört çemberin karşılıkları, EF Core satırını döndürmenin yarattığı JSON döngü hatası, output port ve presenter ile ASP.NET Core'daki Result döndüren pragmatik karşılığı ve Hexagonal, Onion, Clean karşılaştırması.

7 Kas 2026 12 dk 8
Onion Architecture: Domain Model Merkezde, Altyapı Dış Halkada
Yazılım Mimarisi SERİ 03

Onion Architecture: Domain Model Merkezde, Altyapı Dış Halkada

Onion Architecture (Palermo, 2008) uygulamayı bağımsız bir domain model'in etrafına kurar: iç halkalar interface'leri tanımlar, dış halkalar implement eder, tüm coupling merkeze doğrudur ve çekirdek altyapıdan ayrı derlenip çalışabilir. Bookstore'un sipariş kodunu Domain Model, Domain Services ve Application Services halkalarına yerleştiriyor, layered ve Hexagonal'dan farkını, halka-project ilişkisini ve ASP.NET Core Identity örneğini gösteriyoruz.

7 Kas 2026 12 dk 5
Hexagonal Architecture (Ports & Adapters): Uygulamayı Dış Dünyadan Yalıtmak
Yazılım Mimarisi SERİ 02

Hexagonal Architecture (Ports & Adapters): Uygulamayı Dış Dünyadan Yalıtmak

Hexagonal Architecture (Cockburn, 2005), uygulamayı UI, test, batch script ve veritabanından eşit uzaklıkta tutar: dış dünya amaca göre tanımlanmış port'lar üzerinden konuşur, her teknoloji bir adapter ile takılır. Bookstore'da IPlaceOrder driving port'unu Minimal API, console CSV import ve xUnit testiyle, IOrderStore driven port'unu EF Core ve in-memory adapter'la sürüyoruz; ASP.NET Core'un IServer'ı ve altıgenle ilgili yanlış okumalar.

7 Kas 2026 12 dk 7
Dependency'leri İçe Çevirmek: Layered Architecture Nerede Tıkanır?
Yazılım Mimarisi SERİ 01

Dependency'leri İçe Çevirmek: Layered Architecture Nerede Tıkanır?

Layered Architecture'da compile-time dependency yukarıdan aşağı aktığı için iş kuralları EF Core'a, SQLite'a ve dış API'lere kilitlenir; çözüm, runtime çağrı yönünü koruyup interface'leri onları kullanan domain project'ine taşıyarak referans okunu içe çevirmektir. Bookstore'da veritabanı olmadan test yazma ve kargo firmasını değiştirme senaryolarıyla, "interface ekledim, oldu" yanılgısı ve Hexagonal, Onion, Clean'in ortak fikri.

7 Kas 2026 12 dk 5
Mimariyi Zaman İçinde Korumak: Architecture Erosion ve Fitness Function'lar
Yazılım Mimarisi SERİ 09

Mimariyi Zaman İçinde Korumak: Architecture Erosion ve Fitness Function'lar

Mimari kararlar code review'da değil, her PR'da çalışan fitness function'larla korunur: ArchUnitNET ile kapalı layer kuralı, ratchet'li coupling eşiği ve sorgu sayısını sayan bir performans test'i, build'i geçen ama mimariyi bozan bir PR'ı yakalıyor. Erosion ve drift, fitness function türleri, GitHub Actions adımı ve kategori yol haritası.

7 Kas 2026 13 dk 6
Conway's Law: Ekip Yapısı Mimariyi Nasıl Şekillendirir?
Yazılım Mimarisi SERİ 08

Conway's Law: Ekip Yapısı Mimariyi Nasıl Şekillendirir?

Sistemler, onları tasarlayan organizasyonun iletişim yapısını kopyalar: aynı 14 commit katman ekiplerinde %86, akış ekiplerinde %21 oranında birden fazla ekibin koordinasyonunu gerektiriyor. Conway (1968), Inverse Conway Maneuver, Team Topologies'in ekip tipleri ve etkileşim modları, cognitive load ve Bookstore'un 3 kişilik ekip ile 4 stream-aligned ekip için iki farklı doğru mimarisi.

7 Kas 2026 11 dk 6
Mimari Stillerin Haritası: Layered'dan Microservices'e Hangi Stil Ne İçin?
Yazılım Mimarisi SERİ 07

Mimari Stillerin Haritası: Layered'dan Microservices'e Hangi Stil Ne İçin?

Architecture style bir constraint setidir; deployment unit sayısı ve technical/domain partitioning eksenleriyle layered, modular monolith, pipeline, microkernel, service-based, event-driven, space-based, SOA, microservices ve Web-Queue-Worker tek haritaya oturur. Pipeline ve AssemblyLoadContext'li microkernel örnekleri, Bookstore bağlamında kendi stil tablomuz ve Clean/Vertical Slice'ın neden stil değil kod organizasyonu olduğu.

7 Kas 2026 14 dk 5
Monolith'i Doğru Anlamak: Single-Process, Modular ve Distributed Monolith
Yazılım Mimarisi SERİ 06

Monolith'i Doğru Anlamak: Single-Process, Modular ve Distributed Monolith

Monolith kötü kod değil, tek deployment unit'tir; asıl sorun Big Ball of Mud'dır ve o tek process'te de, yirmi service'te de oluşur. Single-process, modular ve distributed monolith farkı, internal ile compiler'a korunan module sınırları, beş service'lik senkron zincirin %99,9 hedefini nasıl kaçırdığı ve Monolith First tartışması Bookstore üzerinden.

7 Kas 2026 14 dk 6
Layered Architecture: Presentation, Business ve Data Layer'larının Gerçek Sorumlulukları
Yazılım Mimarisi SERİ 05

Layered Architecture: Presentation, Business ve Data Layer'larının Gerçek Sorumlulukları

Layered Architecture'ın asıl vaadi closed layer'ların sağladığı izolasyondur, ama .NET'te ProjectReference varsayılan olarak transitive olduğu için Web, Business üzerinden Data'yı sessizce görür; DisableTransitiveProjectReferences bu kuralı derleyiciye taşır. N-layer ve N-tier farkı, closed ve open layer, sinkhole, DB-centric tasarım ve dependency yönünün sorunu.

7 Kas 2026 13 dk 5
Trade-off Düşüncesi: Mimaride Doğru Cevap Yok, En Az Kötü Seçenek Var
Yazılım Mimarisi SERİ 04

Trade-off Düşüncesi: Mimaride Doğru Cevap Yok, En Az Kötü Seçenek Var

Mimaride her seçenek bir characteristic'i başka birinin pahasına kazanır; iş, bedeli görünür kılıp bilinçli kabul etmektir. Bookstore'da sipariş e-postasını senkron göndermek checkout'u SMTP'ye bağlayıp çift sipariş üretirken, Channel<T> ile queue'ya almak checkout'u 1 ms'ye indiriyor ama process kapanınca 3 e-postayı kaybediyor; one-way/two-way door, last responsible moment ve kararın neden'ini yazmak.

7 Kas 2026 13 dk 5
Blog Haritası