Temiz Mimari: Bağımlılıkları İçeriye Doğru Kuran Yaklaşım
Clean Architecture, iş kurallarını arayüz, veritabanı ve çerçevelerden bağımsız tutan katmanlı bir yazılım mimarisidir. İlkeleri, katmanlar ve örnek.
Clean Architecture nedir?
Clean Architecture (temiz mimari), yazılımın iş kurallarını arayüzden, veritabanından, web çerçevesinden ve dış servislerden bağımsız tutmayı hedefleyen bir mimari yaklaşımdır. Robert C. Martin tarafından yaygınlaştırılmıştır. Fikir, daha önceki hexagonal ve onion gibi katmanlı yaklaşımların ortak ilkelerini toplamaktır.
Başlıca amaç, uygulamanın en değerli kısmı olan iş kurallarının teknoloji tercihlerinden etkilenmemesidir. Veritabanı değişse, arayüz yenilense ya da bir çerçeve eskise bile iş kuralları dokunulmadan kalabilmelidir.
Bağımlılık kuralı
Yaklaşımın merkezindeki ilke bağımlılık kuralıdır: kaynak kod bağımlılıkları yalnızca içeriye, yani daha soyut ve daha kararlı katmana doğru işaret edebilir. İç katman, dış katmanın hiçbir ayrıntısını bilmez.
Katmanlar genellikle halkalarla anlatılır: • Varlıklar ve alan kuralları: işin temel kavramları ve değişmez kuralları. • Kullanım senaryoları (uygulama katmanı): bir kullanıcı niyetini gerçekleştiren iş akışları. • Arayüz adaptörleri: veriyi iç katmanların biçiminden dış dünyanın biçimine çeviren kısım (denetleyiciler, sunum mantığı, depo uygulamaları). • Çerçeveler ve sürücüler: veritabanı, web çerçevesi, kullanıcı arayüzü gibi dış ayrıntılar.
İç halka bir dış halkayı çağırması gerekiyorsa, bir arayüz tanımlar ve dış halka bu arayüzü uygular. Bu mekanizmaya bağımlılığın tersine çevrilmesi denir.
Örnek: sipariş oluşturma
Örneğin bir e-ticaret uygulamasında 'sipariş oluştur' kullanım senaryosu, stok kontrolü ve toplam hesaplama gibi kuralları içerir. Bu senaryo siparişi nereye kaydedeceğini bilmez; yalnızca 'sipariş deposu' adında bir arayüzle konuşur. Gerçek uygulama, örneğin bir ilişkisel veritabanına yazan sınıf, dış katmanda yer alır ve bu arayüzü karşılar.
Sonuçta veritabanı değiştirilirse yalnızca dış katmandaki uygulama değişir. Sipariş kuralları, veritabanı ya da web çerçevesi olmadan, sahte bir depoyla hızlıca test edilebilir.
Faydaları ve maliyeti
Faydaları: test edilebilirlik, teknoloji değişikliğine dayanıklılık, iş kurallarının tek yerde toplanması ve büyük ekiplerde katmanlar üzerinden iş bölümü. Uygulama uzun yıllar yaşayacaksa bu avantajlar belirginleşir.
Maliyeti: ek soyutlama, arayüz ve dönüştürücü kodlar. Basit bir kayıt tutma uygulamasında bu yük gereksizdir; her veri tablosu için bir kullanım senaryosu, bir arayüz ve bir adaptör yazmak boşa emek olabilir. Karar uygulamanın karmaşıklığına ve ömrüne göre verilmelidir.
Sık yapılan hatalar
- Klasör yapısını katman sanmak: klasörleri ayırmak bağımlılık kuralını sağlamaz. Asıl ölçü, içeriye doğru bağımlılık yönüdür.
- Alan nesnelerine veritabanı ya da çerçeve ek açıklamalarını bulaştırmak.
- Her şeyi uygulamak için aşırı katman eklemek.
- Kullanım senaryolarını anlamsız bir ara katman olarak bırakmak; senaryo gerçek bir iş akışını temsil etmelidir.
- Test stratejisini katmanlara göre kurmamak: alan katmanı hızlı birim testle, adaptörler entegrasyon testiyle sınanır.
Benzer kavramlarla ilişkisi
Hexagonal mimari (portlar ve adaptörler) ile onion mimarisi aynı düşünce ailesindendir; hepsi iş kurallarını merkeze alıp dış ayrıntıları kenara iter. SOLID ilkeleri, özellikle bağımlılığın tersine çevrilmesi, bu mimarinin dayanağıdır. MVVM ise mobil uygulamalarda temiz mimarinin sunum katmanında sık kullanılan bir desendir.
Mindset programlarında Clean Architecture
Mindset kataloğundaki Clean Architecture ile Sürdürülebilir Yazılım programı mimari ilkeler ve bağımlılık kuralı, alan katmanı ve iş kuralları, kullanım senaryoları, arayüz adaptörleri, altyapı katmanı ve bağımlılık tersine çevirme, refaktör ve test stratejisi modüllerini içerir. Android Uygulama Mimarisi (MVVM, Clean Architecture) programı aynı fikirleri mobil bağlamda işler.
İlgili Mindset programı
Clean Architecture ile Sürdürülebilir Yazılım
Sık sorulan sorular
Clean Architecture ile katmanlı mimari aynı mı?
Benzerler ama aynı değildir. Klasik katmanlı mimaride bağımlılık genellikle yukarıdan aşağıya, arayüzden veritabanına doğrudur. Clean Architecture'da ise bağımlılıklar içeriye, iş kurallarına doğru işaret eder ve veritabanı ya da arayüz dışarıdaki bir ayrıntıdır. Bu yön farkı, iş kurallarını dış değişikliklerden korur.
Küçük projelerde kullanılmalı mı?
Çoğu zaman gerekmez. Birkaç ekranlı, kısa ömürlü ya da ağırlıklı olarak veri girişinden oluşan bir uygulamada ek soyutlama yük olur. Uygulama büyüyecek, iş kuralları karmaşıklaşacak ve uzun süre bakım görecekse temiz mimari fikirlerini kademeli olarak benimsemek mantıklıdır.
Bağımlılığın tersine çevrilmesi ne demek?
Üst düzey bir sınıfın, alt düzey ayrıntıya doğrudan bağlı olmak yerine bir arayüze bağlı olması ve ayrıntının bu arayüzü uygulamasıdır. Böylece iş kuralı veritabanını tanımadan çalışır; hangi veritabanının kullanılacağı dışarıda seçilir ve gerektiğinde değiştirilir.
Clean Architecture mobil uygulamalarda nasıl görünür?
Genellikle sunum, alan ve veri katmanları olarak bölünür. Sunum katmanında MVVM gibi bir desen ekranı yönetir; alan katmanında kullanım senaryoları iş kurallarını taşır; veri katmanında repository sunucu ve yerel depolamayı soyutlar. Bağımlılık enjeksiyonu bu parçaları çalışma anında birbirine bağlar.
İlgili rehberler
İlgili eğitimler
Kategori: Yazılım Geliştirme