Clean Architecture (Temiz Mimari), yazılım sistemlerinin farklı bileşenlerinin sorumluluklarını ayırarak daha bakımı kolay, test edilebilir ve ölçeklenebilir bir kod tabanı oluşturma amacına odaklanan bir yazılım tasarım prensibidir. Bu prensip ilk olarak 2017 yılında Robert C. Martin (Uncle Bob olarak da bilinir) tarafından “Clean Architecture: A Craftsman’s Guide to Software Structure and Design” kitabında tanıtılmıştır.
Clean Architecture, n katmanlı mimari olarak da bilinen bir yazılım tasarım prensibidir. Clean Architecture, yazılım sistemlerinin farklı katmanları arasındaki sorumlulukları açıkça tanımlayan bir tasarım prensibi olduğundan, n katmanlı mimarinin temelini oluşturur.
N katmanlı mimari, yazılım sistemlerini farklı sorumluluk alanlarına bölerek, farklı bileşenlerin kolayca yeniden kullanılabilmesini, bakımının kolaylaşmasını, test edilebilirliğini ve ölçeklenebilirliğini sağlamak amacıyla kullanılır. Bu mimaride, her katman, sadece kendisine ait olan bir işlevi yerine getirir ve diğer katmanlarla mümkün olduğunca az veya hiç bağımlılık içermez.
Clean Architecture, n katmanlı mimarinin daha fazla detaylandırılmış bir versiyonu olarak düşünülebilir. Temel olarak, Clean Architecture, yazılım sistemlerinin katmanlarının birbirinden bağımsız olduğunu ve bir katmanın diğer katmanlar tarafından değiştirilmesi gerektiğinde bile sistemin doğru çalışmaya devam edeceğini varsayar. Bu sayede, yazılım sistemlerinin farklı bileşenlerinde yapılacak değişikliklerin diğer katmanlara etki etmemesi sağlanır.
Clean Architecture ve n katmanlı mimari, birbirlerine benzerlik gösteren prensiplere sahip olsalar da, Clean Architecture, n katmanlı mimariye göre daha modüler ve esnek bir yapıya sahiptir. Her katman, kendi sorumluluklarını ve arayüzlerini belirleyebilir ve diğer katmanlardan bağımsız olarak test edilebilir hale getirilebilir. Bu sayede, yazılım sistemlerinin değişen gereksinimlere kolayca uyum sağlayabilmesi ve sürekli olarak geliştirilebilmesi mümkün hale gelir.
Clean Architecture prensiplerinin ana hatları şunlardır:
- Sorumlulukların ayırımı: Sistem bileşenleri sadece bir işlevi yerine getirmelidir.
- Bağımlılık tersine çevirme prensibi: Yüksek seviyeli modüller, düşük seviyeli modüllere değil, soyutlamalara bağlı olmalıdır.
- Arayüz kullanımı: Soyutlamalar, arayüzler kullanılarak tanımlanmalıdır. Bu, daha fazla esneklik ve daha kolay test edilebilirlik sağlar.
- Test edilebilirlik: Mimaride, birim testlerinden entegrasyon testlerine kadar tüm seviyelerde test yapmayı kolaylaştıracak şekilde tasarlanmalıdır.
- Ölçeklenebilirlik: Mimaride, gereksinimler ve teknoloji değişikliklerine adapte olabilen ve gereksiz karmaşıklık eklenmeden büyümeyi destekleyen bir yapı oluşturulmalıdır.
Temel olarak, Clean Architecture, anlaşılması, değiştirilmesi ve bakımı kolay bir yazılım sistemi oluşturma amacına odaklanır ve değişen gereksinimlere ve teknolojilere uyum sağlayabilir bir yapı oluşturulmasını amaçlar.