Son Haberler
Anasayfa / Architecture & Design / Clean Architecture

Clean Architecture

Neden uygulamamızı katmanlara ayırmalıyız ? Bize ne gibi avantajlar sağlıyor ?

Clean Architecture, frameworklerden bağımsız bir yaklaşım biçimidir. Clean Architecture, SOLID presiplerinin ilkerini benimseyen bir yapıdır.

Neden uygulamamızı katmanlara ayırmalıyız ?

Geliştirmek istediğimiz bir sistemde iş parçacıklarının birbirinden ayrı, bir bölümde değişiklik yapıldığında  diğer bölümlerde herhangi bir değişiklik olmamasını isteriz. Bunun yanında proje büyüdükçe kodların okunmasının zorlaşmasıda bizi katmanlı mimari kullanmaya teşvik etmekte. İş parçacıklarını birbirinden bağımsız veya gevşek bağlılık(loose-coupling) yaparsak kolayca test yazabilir ve sonradan yapılan değişikliklerde sistemimizde herhangi bir sıkıntı olup olmadığını gözlemleyebiliriz.

Avantajları 

  • Veritabanı için kullanılan ORM bağımsızdır. Örneğin; Sistemimizde Entity Framework kullandık. İleri zamanlarda Dapper entegre etmek istediğimizde kodları düzeltmemize gerek kalmayacak. Dapper için class ve interface yapısı oluşturarak devam edeceğiz.
  • Daha kolay test edilebilir bir yapı oluşmuş olur.
  • Arayüzden bağımsız olduğu için herhangi bir arayüze oluşturduğumuz sistemi entegre edebiliriz.
  • Yazımızın ilk başında da belirttiğimiz gibi Frameworklerden (.Net, Spring vs.) bağımsızdır.

 Clean Architecture’nin 2 temel prensibi vardır;

  • Abstraction Principle
  • Dependency Rule

Abstraction Principle : Üst kısımdaki çemberin merkezine gidildikçe çember daha da soyutlaşır.

Dependency Rule : Her bir çember sadece bir içteki çembere ihtiyaç duyar. Mesela Application katmanın bağımlılığı sadece Domain katmanıdır.

Katmanlar

Domain Katmanı : 

  • Entities : Veritabanındaki tabloların nesnel olarak karşılığı olan kısım. Örnek : Products tablosunu temsil eden bir Product Class yapısı.
  • Value Object : Kendine ait unique bir kimliği olan nesneler Entity olarak adlandırılırken, kendine ait bir kimliği olmayanlar ise value object olarak adlandırılır.
  • Exceptions : Domain için oluşturduğumuz exception sınıfları.
  • Logic : Domain katmanı ile alakalı mantıksal işlemler

Application Katmanı : 

Bu katmanda genel olarak mantıksal işlemlerimizi yaparız. Örneğin; Gelen isteklerin işlendiği, validasyonlarının yapıldığı, veritabanı kayıtlarının yapıldığı katmandır. Bu katmanın tek bağlılığı domain katmanıdır.

  • Interfaces : Mail servisi veya notification arayüzleri olabilir.
  • Models : Application katmanında kullanılan modellerin bulunduğu kısım.
  • Logic Commands / Queries : Bu kısım servise gelen isteklerin Request ve Response modellerini, bu servislerin mantıksal işlemlerini ve veritabanı kayıtlarının bulunduğu kısım.
  • Validators : Gelen isteklerin validasyonlarının bulunduğu kısım.
  • Exceptions : Oluşan hatalar için de yazılan Exception sınıflarının bulunduğu kısım.

Infrastructure Katmanı : 

Bu katmanda, sisteme eklenecek harici birimler bulunur. Bu katmana, hiçbir katmanın bağlılığı olmaması gerekir.

  • EF Core DbContext
  • Dapper
  • Redis Cache Service
  • Email
  • SMS

Presentation Katmanı : 

Bu katmanda, business kodları bulunmamalıdır. Business kodları Application katmanında yapılır ve presentation katmanı ile haberleştirilir.

  • Single Page Application (React, Angular, Vue …)
  • MVC
  • API