Temiz mimari, modern yazılım geliştirmesinde sadece bir kutbundan daha fazlasıdır - bir kasıtlı, yapılandırılmış bir yaklaşımdır.Bu bağımsızlık, zaman testini yerine getiren sistemleri tasarlamak için yapılandırır ve bu geniş kapsamlı araştırmada, temel ilkeleri organize etmek için bir dizi kural sunar, böylece iş mantığı, tabakalı yapının pratikte nasıl çalıştığını ve sürdürülebilir yazılımlar için temel bir zihniyet olduğunu öğrenir.

Temiz Mimarlık Nedir?

Temiz mimari Robert C. Martin tarafından popülerleştirildi (Boğan Amcası olarak anılıyor) kitabının [[0)Temiz Mimarlık: A Craftsman'ın Yazılım Yapısı ve Tasarımı) ve bir dizi blog yazısına göre temel felsefe, en saf iş mantığı ve dış katmanı içeren içsel katmanlar ile, web çerçeveleri, veritabanı ve arayüz bileşenleri gibi dışsal kullanım alanları ile ilgili ayrı endişeler.

Bu yaklaşım radikal bir şekilde yeni değildir - Hexagonal mimari (Alistair Cockburn), onion mimarisi (Jeffrey Palermo), ve alan odaklı tasarım (Eric Evans): Dış katmanlarda temiz bir nokta, her bir takımın kabul edilebilir bir setine bağlı olarak, her zaman dış tabakaya veya çerçeveye bağlı olarak hiçbir şey değildir.

Bu kuralın uygulanmasına göre, geliştiriciler bu değişikliklerin çerçevelere, veritabanına veya UI teknolojileri temel iş mantığını bozmaya karşı çıkmıyorlar. Sistem temel olarak teknolojik churn'a karşı dirençli hale gelir.

Temiz Mimarlık Temel Prensipleri

Prensipler bir projenin tüm yaşam döngüsü boyunca karar vermeye rehberlik etmek için tasarlanmıştır. Her prensibi derinlikte inceleyelim.

1. Çerçeve Bağımsızlığı

Bir çerçeve bir araçtır, sisteminizin temeli değil. Temiz mimaride, iş mantığınız belirli bir çerçeveye sıkıca davranılmalıdır. Örneğin, bir web uygulaması reaktör, Angular veya Vue gibi bir çerçeve ile inşa ediyorsanız, temel alan mantığının çoğuna eklenmemesi gerekir.

2. Testability

İş kuralları dış bağımlılıklardan izole edildiğinde, daha sık ve daha önce test edilebilir hale gelirler. Ayrıca, dış katmanlar için birim testleri yazabilirsiniz ve arayüzler olmadan vakaları kullanabilirsiniz, bir UI sunucusuna alay edebilir veya bir UI yükleme. Bu hız ve testin güvenilirliği, geliştiricilerin daha sık ve daha önce test etmesini teşvik eder, çünkü dış tabakaları (örneğin veritabanı ve API'ler ve API'ler gibi) aynı zamanda arayüzleri kullanarak, kodu tam sisteme ihtiyaç duymadan doğrulayarak kolayca yazabilirsiniz.

3. Endişelerin Ayrılığı

Temiz mimari, bir sistemi katmanlara bölüyor, her biri ayrı bir sorumlulukla. iç en çok katman ([Döneticiler) kurumsal olarak iş kuralları arasında yer alan ve aşağıdakiler için ([Dönetici:2) Uygulamaya göre) kullanım koşulları ([Döneticileri) işlemden uzaklaştırıyor.[Döneticileri değiştir)[Döneticileri değiştir)

4. Bağımlılık Kuralı

Bu kural, mimarlıkta birlikte olan yapıştırıcıdır. Kaynak kodu bağımlılıkların her zaman sıraya geçmeleri gerekir: iç katmanlara karşı dış katmanlardan dış tabakalardan hiçbir zaman dış katmanı tanımamalıdır. Uygulamada, bu, arayüzlerin kullanım durumlarında ve varlıkların sahip olduğu arayüzlerin gerçek çiftliğe sahip olduğu anlamına gelir. Dış katmanlar, örneğin, bir kullanım durumundan bir kullanıcının dış tabakadan tasarruf etmesi gerekir, bir kullanıcıdan yararlanılabilir.

Temiz Mimarlık Katmanları

Katmanların sayısı projeye bağlı olarak değişebilirken, kanonik temiz mimari diyagramı dört konsantrik halka gösterir. Her katmanın doğru şekilde uygulanması için temel olduğunu anlamak.

Entities (Enterprise Business Rules)

Entities sistemin en istikrarlı parçasıdır. Tüm organizasyonda geçerli olan temel iş kurallarının oluşturulması gerekir. Örneğin, bir bankacılık sisteminde, aFLT:1'de varlık, yöntem veya web çerçeveleri gibi bir şekilde içerir.

Vakaları kullanın (Uygulama İş Kuralları)

Sistem bir aktörün bakış açısından nasıl davrandığını (insan kullanıcı, başka bir sistem veya zamanlayıcı) tanımlar ve varlıklardan ve arayüzlerden (örneğin, aENFLT:4) için, örneğin dış tabakaların dışsal uygulamaları olarak tanımlayabilirler.

Interface Adapts

Bu katman, vaka ve varlıklar için en uygun format arasındaki verileri döndürür (tip olarak açık veri yapıları) ve dış ajanslar tarafından gerekli olan format. Common components:

  • [FONT:0)Denetler[Döneticiler[Döneticiler)[Dönemli HTTP istekleri ve uygun kullanım davasını çağırın.
  • [FONT:0)Öylegeler[[Dönler)[Döneticileri değiştir], kullanıcı çıktısını bir görüntü modeli gibi UI için uygun bir formata dönüştürmektedir.
  • [FONT:0)Database ağ geçidi[[Dönetici arayüzü uygular ve varlık verileri ve SQL veya NoSQL işlemleri arasında tercüme edilir.
  • [FONT=0)API müşteri adaptörü ([Dönetici hizmetleri çağıran ve iç tabakadaki veri yapılarına yanıt veren .

Sistem katmanı, "glue" kod yaşamlarının çoğu olduğu yerdir. Ayrıca dış teknolojiler geliştikçe en sık değişmeye eğilimli olan katmandır.

Çerçeveler ve Sürücüler

Dış yüzük, sistemin kullandığı tüm beton teknolojileri içerir: Web sunucusu (örneğin, Express, Django, Spring Boot), veritabanı yönetim sistemi (örneğin, PostgreSQL, MongoDB), UI çerçevesi (örneğin, Regular) ve bu nedenle mümkün olduğunca ince olmalıdır. birincil işi, uygun uygulamaları arayüz adaptörlerine enjekte ederek ve vakaları kullanarak uygulamayı kapatmaktır.

Temiz Mimari Kullanımının Faydaları

Temiz mimarinin benimsenmesi, bu şekilde yapılandırma kodunın ön çabasını sınır dışı eden uzun vadeli avantajlar.

  • [FONT:0)Maintainability:[Dönetici:[Dönetici değiştirdiğinizde, yalnızca ilgili kullanım durumunu ve özelliklerini değiştirirsiniz – tüm uygulama değildir. Çünkü bağımlılıklar dış katmanlarda (bir veritabanı takas gibi) nadiren iş mantığına dönüşür.
  • [FONT:0)Testability:[Dönetici:[Dönetici:0) Daha önce belirtildiği gibi, düşük darbe, iş kurallarını tam bir ortamda ayarlamadan izolasyonda test edebileceğiniz anlamına gelir.Bu, koda daha hızlı geri bildirim döngüleri ve daha yüksek güven sağlar.
  • [FONT:0]Flexability:[[Dönetici:[Dönetici:0)[[Dönetici:0))[[[Dönetici:0)))))))))))))|profillik işlemi olmadan, basit bir dosya tabanlı kalıcılık ile başlayabilirsiniz ve daha sonra yeniden yazma iş mantığı olmadan ilişkisel bir veritabanına geçiş yapabilirsiniz.
  • [FONT:0)Scalability:[Dönetici:[Dönetici:0) Temiz mimari, otomatik olarak sistem ölçekünüzü yatay hale getirmez, ancak katmanların farklı takım üyelerini (veya hatta farklı takımlar) ayrıştırarak, kullanıcı arayüzü, veritabanı ve iş mantığı üzerinde aynı anda başka her birine adım atmadan çalışabilir.
  • [FONT:0]Onboarding ve işbirliği: [Dönetici:[Döneticiler) Yeni geliştiriciler genel yapısını hızla anlayabilirler çünkü mimarlık iyi bilinen bir desen takip eder. Tüm kodbase'i anlamadan belirli katmanlara atabilirler.

Bu modelin arkasındaki motivasyona daha derin bir şekilde atabilirsiniz, Robert C. Martin'in orijinalü:0)Temiz Mimarlık blogu yayın) veya keşfetmesi ).Martin Fowler'in alan odaklı gözlemlenebilirlik tartışması).

Uygulamada Temiz Mimariyi Uygulamayı Uygulamayı

Temiz mimariye geçiş, özellikle bir miras kodubase ile çalışıyorsanız, özellikle de bir mirastan yararlanabilirsiniz. Aşağıdaki pratik adımlar başladınıza yardımcı olacaktır.

Adım 1: Core Domaini Tanımlayın ve Tanımlayın

Mevcut kodunuzu saf iş kurallarını bulmak için inceleyerek başlayın. Bunlar, sizin veri tabanı veya UI yarın değiştirmeniz durumunda hala mantıklı olacaktır. onları ayrı bir modüle (örneğin, bir paket, bir klasör veya mikro hizmet) bir harici bağımlılıklar ile asır.

Adım 2: Dış Etkileşimler için Arabi Arabirim

Dış bir sistem gerektiren her operasyon için (database, dosya sistemi, ağ, UI), temel perspektiften bir arayüz tanımlayın. Örneğin, aTAYFLT:6) gibi yöntemler ile arayüz oluşturma ve uygulama hakkında endişelenmeyin; arayüz temele ait.

Adım 3: Bu Interfaces'leri Uygulamayı Uygulayan Adaptasyonlar Oluşturma

Şimdi, arayüzleri uygulayan dış katmanlarda beton sınıfları oluşturun. Bir veritabanı adaptörü için, bu adaptörleri doğrudan ithal eden bir depo sınıfı olabilir.Bir UI adaptörü için, bu bir web görünümü için veri dönüştürmek için bir kontrol ve mevcut olabilir.

Adım 4: Çerçeve Katmanında Birlikte Her Şey

Bağlanma enjeksiyonu kullanın - bir konteyner, bir kompozisyon kök veya manuel kablolama yoluyla - bu beton sınıflarına bağlı olarak adaptörleri bağlar. Bu, dış katmanın sorumluluğudur. Örneğin, tipik bir web uygulamasında, ana giriş noktası veritabanı adaptörü yaratır, kullanım durumu ve kontrolcü, sonra sunucuya açıktır.

Adım 5: Sürekli Yeniden Yeniden Yeniden İflet Edilmesini Uygulayın

Temiz mimari tek zamanlı bir çaba değildir.Ek özellikler eklerken, yeni kodların bağımlılık kuralı ihlal etmediğini sürekli olarak kontrol edin. Mimari sınırları uygulamak için araçlar kullanın (örneğin, Java için ArchUnit for Java, or PHPStan with custom rules for cases and entities, and push framework-specific code outside.

Common Pitfalls Kaçmak için

  • [FONT:0)Genel olarak küçük projelere sahip olmak: Temiz mimarlık, tek bir kullanım durumunda basit bir CRUD uygulaması için ve beklenen değişiklikler olmadan, genel kararınızı kullanmayabilir.
  • [FONT:0)Bir varlık sınıfında bir çerçevenin kullanılması şaşırtıcı derecede kolaydır.[FONT=0) Örneğin, bir ORM'nin bir varlık sınıfında bir notasyonunu kullanarak, temel modülünüzü ilk önce dış bağımlılıkları doğrulamanız için çalıştırmak gerekir.
  • [FONT:0) Çok fazla arayüzden vazgeçin:[Dönetici:0)Her bir sınıf için bir arayüze ihtiyacınız yoktur. Sadece önemli dışsal sınırlarla başlayın (database, UI, dosya sistemi) ve gerekirse daha sonra genelleştirin.
  • [FONT:0) Hatayı sınırlayamam:[Döneticileri tıkır ve katman sınırları boyunca yakalanmış gibi durumlar dikkatli tasarım gerektirir. İç katmanlar, temel için anlamlı olan iş istisnalarını atmalıdır. Dış adaptörler bunları çerçeveye özgü hataları (örneğin, HTTP protokolü bilmeden) içine dönüştürür.

Gerçek Dünya Örneği: Basit Bir Sipariş İşleme Sistemi

Bir sipariş yerine getirme ihtiyacı olan bir e-ticaret uygulaması düşünün. Temiz bir mimari yaklaşımda:

  • [FONT:0)Entities:[[Dönler:[Dönler:[Dönler: · 9)) [FONT=FONT=0)))) “Bir siparişin en az bir eşyası olması gerekir” ve “bir ürün stoku olumsuz olamaz.”
  • [FONT:0) Uygulama: [Dönetici: [Dönetici: 0,8|0]Use Case:[Dönetici: [Dönetici:0)[0)|Dönetici: [Dönetici:0)))) Müşteri kimlik ve ürün listesi içeren bir istek alır.
  • [[Döneticileri: [Döneticileri: [Dönetici: · 9|0] AurFLT:0) DNS isteğinden veri çıkar, kullanım durumunu çağırın ve sonra bir JSON cevabına dönüşür. AİLFLT: 18).
  • [FONT:0]Frameworks ve Sürücüler: Kombine bir web sunucusu ayarlar, veritabanı bağlantı havuzunu başlatır ve tüm bağımlılıkları birlikte kablolar.The web framework (e.g., Express.js or Spring Boot) sadece bu dış ringde görünür.

Daha sonra PostgreSQL'den MongoDB'ye geçiş yapmaya karar verirseniz, sadece yeni bir GÜNCELT:22 yazmanız ve kompozisyon köküni güncellemeniz gerekir.Kullanılan durum ve varlıklar SMS gibi yeni bir bildirim kanalı eklemek istiyorsanız, başka bir adaptör ve kayıt yaptırırsınız.

Temiz Mimarlık'ı ne zaman benimsemelisiniz?

Temiz mimari bir gümüş mermi değildir. Yüksek karmaşıklık, uzun beklenen bir ömür veya şirketin başarısına merkezi olan bir iş alanı ile projelerde en değerlidir.

  • İş kurallarına sık sık değişiklikler öngörürsiniz.
  • Sistem, değişebilir birçok veritabanı veya dış hizmetlerle entegre edilmelidir.
  • Paralel olarak çalışmak için gereken bir geliştirici ekibine sahipsiniz.
  • Birden fazla müşteri arayüzüne hizmet eden sistemler (web, mobil, masaüstü) aynı geri dönüşten hizmet ediyorsunuz.

Öte yandan, küçük prototipler için, bir-off senaryolar veya çok kısa bir yaşam döngüsü ile projeler, daha basit bir mimari (sadece MVC yapısı gibi) daha pragmatik olabilir.Proje büyüdükçe her zaman temiz mimariye karşı yeniden faktörlenebilirsiniz.

Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç

Temiz mimari, dış teknolojilerin kaçınılmaz zıvırları oluşturmak için kanıtlanmış bir yaklaşımdır ve arayüzleri tasarlarken, her bir projeye, ilkelerine bağlı olarak, temel iş mantığını yapılandırabilir ve bağlantı kurmanız gereken her bir sistemden bağımsız olarak, her bir şekilde yeni ekip üyesine geçiş yapmanız gerekir.

Alan modelleme ve temiz mimarlık hakkında belirli programlama dillerinde daha fazla okuma için, you may refer toETHFLT:0)Domain-Driven Design Community) veya [[ENFLT:2)explicit mimarisi makalesi Herberto Graça ile birkaç desenle bağdaştırıyor.