Clean Architecture
Temiz Mimari
- Okunuşu
- klin arkitekçır
Kısaca
Clean architecture, temel iş kuralları framework'e, veritabanına ya da kullanıcı arayüzüne asla bağımlı olmasın diye yazılımı katmanlara ayırma yöntemidir.
Clean architecture nedir?
Clean architecture, yazılım mühendisi Robert C. Martin'in 2012'de yaygınlaştırdığı, bir uygulamayı eş merkezli katmanlar hâlinde düzenlemeye yönelik yönergeler bütünüdür. Merkezde çekirdek iş kuralları olan entity'ler yer alır; onların çevresinde uygulamanın ne yaptığını tarif eden use case'ler, ardından controller ve repository gibi arayüz adaptörleri, en dışta ise web framework'ü, veritabanı ve arayüz gibi framework'ler ve sürücüler bulunur.
En önemli fikir bağımlılık kuralıdır: kaynak kod bağımlılıkları yalnızca içeriye doğru olabilir. İş mantığı veritabanı kütüphanesini ya da web framework'ünü asla içe aktarmaz; bunun yerine OrderRepository gibi arayüzler tanımlar ve dış katmanlar bunların uygulamalarını sağlar. Bu, Bağımlılığın Tersine Çevrilmesi İlkesi'nin bütün bir uygulamaya uygulanmasıdır ve genellikle dependency injection ile birbirine bağlanır.
Yapısı mobilyalarına bağlı olmayan bir ev benzetmesi yapılabilir: taşıyıcı duvarlara dokunmadan duvarları yeniden boyayabilir ya da kanepeyi değiştirebilirsiniz. Aynı şekilde bir ekip, çekirdek bu ayrıntıların var olduğunu bilmediği için veritabanı değiştirebilir, web uygulamasının yanına mobil uygulama ekleyebilir veya her iş kuralını gerçek veritabanı olmadan test edebilir.
Clean architecture, iş mantığını teknolojiden bağımsız tutma amacını paylaşan hexagonal architecture (ports and adapters) ve onion architecture ile yakından ilişkilidir. İsimlendirme ve biçimlendirme gibi temiz kod stiliyle ilgili değildir ve bedava da değildir: ek katmanlar ve arayüzler şablon kod (boilerplate) ekler; bu yüzden küçük uygulamalar ve prototipler çoğu zaman tam yapıya ihtiyaç duymaz.
Önemli noktalar
- Kod katmanlara ayrılır: entity'ler, use case'ler, arayüz adaptörleri ve framework'ler.
- Bağımlılık kuralı: bağımlılıklar yalnızca içeriye, iş kurallarına doğru işaret eder.
- İş mantığı arayüzleri tanımlar; dış katmanlar bunları uygular.
- Çekirdek, veritabanı, framework ya da arayüz olmadan test edilebilir.
- Ek katmanlar şablon kod getirir; bu yüzden yapıyı proje boyutuna göre ayarlayın.
Örnek
// Inner layer: business rules that depend only on an interface they define
type Order = { id: string; total: number };
interface OrderRepository { save(order: Order): Promise<void> }
class PlaceOrder {
constructor(private orders: OrderRepository) {}
async execute(order: Order) {
if (order.total <= 0) throw new Error("Order total must be positive");
await this.orders.save(order);
}
}
// Outer layer: a database adapter implements that interface
class SqlOrderRepository implements OrderRepository {
async save(order: Order) { /* INSERT INTO orders ... */ }
}Sık sorulan sorular
Clean architecture'da bağımlılık kuralı nedir?
Bağımlılık kuralı, iç bir katmandaki kodun dış bir katmandaki hiçbir şeye bağımlı olmaması gerektiğini söyler. İş kuralları framework ya da veritabanı kodunu içe aktarmaz; bunun yerine dış katmanlar, iç katmanların tanımladığı arayüzlere bağımlıdır.
Clean architecture ile hexagonal architecture arasındaki fark nedir?
İkisi de iş mantığını teknik ayrıntılardan yalıtma amacını paylaşır. Hexagonal architecture bunu port ve adaptörlerle çevrili bir çekirdek olarak tarif ederken, clean architecture entity ve use case gibi daha açıkça adlandırılmış katmanlar ekler.
Clean architecture küçük projeler için gereğinden fazla mı?
Çoğu zaman evet. Küçük uygulamalarda ya da prototiplerde ek arayüzler ve katmanlar, pek fayda sağlamadan geliştirmeyi yavaşlatabilir. Birçok ekip daha basit başlar ve kod tabanı ile iş kuralları büyüdükçe daha net sınırlar getirir.
İlgili sayfalar
- SOLIDYazılım Mimarisi, s. 39SOLID, geliştiricilerin daha anlaşılır, genişletilebilir, test edilebilir ve bakımı kolay kod yazmasına yardım eden beş nesne yönelimli tasarım ilkesidir.
- Dependency InjectionYazılım Mimarisi, s. 10Dependency injection, bir nesnenin ihtiyaç duyduğu diğer nesneleri kendisi oluşturmak yerine dışarıdan almasını sağlayan bir tasarım tekniğidir.
- İlgilerin AyrılmasıYazılım Mimarisi, s. 19İlgilerin ayrılması, bir programı her biri davranışının açıkça tanımlanmış tek bir yönünden sorumlu ayrı parçalara bölen bir tasarım ilkesidir.
- Domain-Driven DesignYazılım Mimarisi, s. 12Domain-driven design, kodu iş alanına yakından modelleyen ve alan uzmanlarıyla aynı dili kullanan bir yazılım geliştirme yaklaşımıdır.
- MVCYazılım Mimarisi, s. 26MVC, uygulamayı veri ve mantık için Model, gösterim için View ve kullanıcı girdisini yöneten Controller olmak üzere üçe ayıran bir mimari desendir.
- Tasarım DeseniYazılım Mimarisi, s. 42Tasarım deseni, yazılım tasarımında sık görülen bir soruna kanıtlanmış, yeniden kullanılabilir çözümdür; hazır kod değil, genel bir şablon olarak anlatılır.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin