Blog
Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.
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.
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.
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ş.
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.
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ı.