Modern Yazılım Geliştirmede Katmanlı Mimariyi Anlamak

Katmanlı mimari, erişilebilir, test edilebilir uygulamalar için en kanıtlanmış ve pragmatik tasarım modellerinden biri olarak kalır.Sönetici katmanları organize ederek - mevcut özellikleri kırmadan belirli bir sistem oluşturmak için ekipler, bağlı mimarinin doğrudan nasıl geliştirildiğini ve testlerin önemli ölçüde daha basit hale geldiğini araştırır.Bu model, Directus gibi içerik yönetim platformlarında özellikle değerlidir ve veri erişimi, iş mantığı ve sunumun mevcut özellikleri kırmadan işlevleri genişletmelerini sağlar.

Katmanlı Mimarlık Nedir?

Katmanlı mimari, her birinin belirli bir endişe ile idare ettiği modüller için bir uygulama ayırır. En yaygın katmanlar şunlardır:

  • [[Dönetici:0)Öyleleme Katmanı:[Dönetici:[Dönetici:0)Tests kullanıcı arayüzü ve giriş / ⁇ . Web uygulamalarında bu kontroller, görüşler ve API uç noktaları içerir.
  • [FONT=0)İş Mantık Katmanı (veya Hizmet Katmanı):), temel iş kuralları ve iş akışları içerir. Bu orkestralar işlemleri ve alan mantığı uygular.
  • [FONT=0)Data Access Katman (veya Persistence Katmanı):), veritabanı, dış depolama veya üçüncü taraf API'leri ile iletişim kurar.
  • [FONT:0)Integration/Infra structure Katmanı (optional):[[Dönetici: 1) Giriş, kalibrasyon, kimlik doğrulama ve dış hizmet entegrasyonu gibi sorunları ele alır.

Her katman sadece aşağıdaki katmanla etkileşime girer (veya yukarıdakiler, bağımlılık yönünden bağlı olarak). Bu katı iletişim modeli, veri katmanında değişiklik yapmak için depo sınıfları (veri erişim) kullanır.).

Katmanlı Mimarlık Ortakları

Üç katmanlı model en yaygın olsa da, birçok takım dört katmanlı veya beş katmanlı bir yapıya sahiptir. Bazı değişiklikler şunları içerir:

  • [FONT:0)Temiz Mimarlık / Onion Mimarlık: [DÜDÜT:1] Emphasizes, iç katmanların içsel katmanlarına bağlı olarak, dış tabakalara bağımlı hale getirilmesiyle bağımlılık gösterir.
  • [FONT=0)Hexagonal Mimarlık (Ports ve adaptörler):[[Dönler) ve adaptörler (önemli) dış endişelerden uygulama çekirdeğini bölmek için.
  • [FONT:0]Domain-Driven Design Katmanları: Ayrı alan, uygulama, altyapı ve sunum tabakaları iş domain terminolojisi ile uyumlu hale getirmek için.

Türevden bağımsız olarak, temel ilke aynı kalır: 0:0) Sistemi açık sınırlar ve sorumluluklarla katmanlara sokmaktadır).

Katmanlı Mimarlık Test edilebilirliği Nasıl Geliştirilir

Test edilebilirlik, bir yazılım parçasının izolasyonda nasıl test edilebilir ve test edilebilirliği geliştiren birkaç özellik nasıl hızlı bir şekilde tespit edilebilir.

Endişelerin izolasyonu

Her katman tek bir sorumluluğu olduğunda, yalnızca sistemin diğer bölgelerinden endişe etmeden bu sorumluluğu ele alan testleri yazabilirsiniz. Örneğin, iş mantığı katmanı için testler, kullanıcıların verileri tamamen kopyalayarak yapılabilir.Bu, mantığınızın doğruluğunu doğru bir şekilde doğrulamanız anlamına gelir.In Directus, bir izin kuralı test edin (örneğin, “kullanıcı sadece kendi eşyalarınızı güncellemek”), kullanıcıların verileri geri döndürür.

Bileşenlerin alt yapısı

Çünkü katmanlar iyi tanımlanmış arayüzlerle iletişim kurar (örneğin, bir fild:0) arayüz), test veritabanına kadar gerçek uygulamaları değiştirebilirsiniz, bu test çiftleri –mocks, sahteler veya stubs – bir tabakalı mimari olmadan, test testleri basitleştirir.

Testlerdeki Kompleksiyetin Azaltılması

Testler yazmak ve korumak için daha basit hale gelir. Her test küçük, özel bir işlevsellik parçası kapsar. Test başarısız olduğunda, geliştirici her iki hizmet test ve kontrolör testleri tarafından kullanılan veri katmanı için hızlı bir şekilde test oluşturabilir.Bu test paketini güvenilir bir güvenlik ağı haline getirir.In a katmanlı codebase, you can also reuse test altyapısı için -örneğin, her iki hizmet test ve kontrolör testleri tarafından kullanılan veri katmanı için paylaşılan bir alay.

Farklı Test Türleri için Destek

Katmanlı mimari doğal olarak [DÜT:0) piramiti ) destekler:

  • [FONT:0)Unit Testleri (fast, birçok):) Bir katman içinde bireysel sınıf veya yöntemleri test edin, bağımlılıklar için alaylar kullanın.
  • [FONT:0)Integration Testleri (ortalama, daha az): [Dönetici:0) İki katman arasındaki test etkileşimleri (örneğin, hizmet + veritabanı havuzu gerçek bir test veritabanı ile).
  • [FONT:0]Bit bit-to-Bitki Testleri (slow, birkaç):[Dönetici: 1 ) UI veya halk API aracılığıyla tam bir yığın test edin.

Açık katmanlar olmadan, entegrasyon testleri genellikle birim testlerinden ayırt edilebilir hale gelir ve E2E testleri çok ağır bir şekilde, geri bildirim döngülerine yol açar.

Otomatik Test Katmanlı Mimari ile Kapaklama

İyi tanımlanmış bir tabakalı yapıya sahip olmak, yüksek otomatik test kapsamasını daha kolay hale getirir çünkü her katmanı uygun teknikle iyice test edebilirsiniz.

Unit Test Her Katmanı Isolation

İş mantığı katmanı için, her kuralı doğrulayan testleri yazın, koşul ve hata yolu. Belirli verileri geri getirmek veya istisnalar atmak için veri erişim katmanını alın. Örnek: abonelik fiyat hizmetini test edin - farklı müşteri tiers ve doğru fiyat hesaplamasını iddia edin - bu veri tabanını hiç aramadan yapılır.

Veri erişim katmanı için, doğrulanan giriş sırasında beklenen sonuçları geri döndürür veya test konteynerini doğrulayan bir entegrasyon testleri yazabilirsiniz.Bu testler, veri katmanının beklenen sonuçları geri döndürür.

Sunum katmanı için, hafif bir HTTP sunucusu ile kontrolleri test edebilirsiniz ve iş mantığı katmanını alay edebilirsiniz. Bu, routing, validasyon ve yanıt formatlarının tam bir uygulama çizmesi olmadan doğru olduğunu gösterir.

Katmanlar arasındaki entegrasyon testi

Bütünleme testleri, katmanların sözleşmelerinin iş mantığı katmanından (örneğin, 404 yanıt) yararlanan bir hizmet yöntemi çağırabileceğini onaylar ve verilerin erişim katmanının doğru parametrelerle doğrulandığını doğrulayın. Veya sunum katmanının iş mantığı katmanından doğru şekilde atıldığını test edin (örneğin, 404 yanıt) Bu testler arayüz beklentileri veya veri serileştirme hatalarına karşı yanlış eşleşmeleri yakalamak.

Core Workflows'ın son testini

End-to-end testleri (örneğin, Cypress veya Playwright) uygulamayı kullanarak, UI veya Public API dahil olmak üzere tüm uygulamayı egzersizi yapabilirsiniz. Çünkü alt tabakalar zaten iyi test edilmiş, E2E testleri eleştirel kullanıcı yolculuklarına odaklanabilir (örneğin, “kullanıcı bir rol geliştirir).

Otomatik test kapsamı metrikler

Katmanlı mimari ile, tabaka başına kapsamayı takip edebilirsiniz. Ortak bir hedef:

  • [FONT=0)İş mantığı katmanı: [Dönetici:% 90-% 100 şube kapsamı.
  • [FONT=0)Data access katmanı:[Dönetici:[Dönetici:0)[[değiştir | kaynağı değiştir]
  • [FONT:0)Öyleleme katmanı:[Dönetici:% 70-80)% 70 (geçmiş ve routing üzerinde).

Bu granular izleme, takımların zayıf noktaları hızlı bir şekilde tanımlamalarına yardımcı olur. Eğer iş mantığı kapsaması azalırsa, ünite testlerini eklemek için açık bir sinyaldir. katmanlar olmadan, kapsama metrikleri anlamsızdır - genel olarak yüzdeler yağ kontrolörleri içinde test edilmemiş kritik iş kurallarını gizleyebilir.

Katmanlı Mimariyi Max'e Uygulamak için En İyi Uygulamalar

Katmanlı mimariyi benimsemek yeterli değildir; tabakaların nasıl yapılandırılmış ve test edildiğine disiplini uygulamanız gerekir.

1. Katmanlar arasındaki Clear Interfaces

Her katman sadece arayüzleri ortaya çıkarmalı (veya soyut sınıflar) yukarıdaki katmanlara bağlıdır. Örneğin, iş mantığı katmanı bir veritabanı olmadan izin ve iş akışlarına bağlıdır.Sağda 3, bu tür bir testte alay etmesine izin verir.In Directus, bu model yaygın olarak kullanılır - hizmetler veritabanına bağlıdır.

2. Bağımlılığı Enjeksiyonu (DI)

Test sırasında gerçek uygulamaları telk için bir DI konteyner kullanın. Test sırasında, onları alaylarla takas edin. DI ayrıca hem test edilebilirliği hem de okunabilirliği artıran bağımlılık grafiğini de sağlar.

3. Çerçevelerin Bağımsızlarını Tutun

Belirli bir web çerçevesine veya ORM'ye iş katmanında darbe yapmaktan kaçının. Bu, mantığı farklı bağlamlarda yeniden kullanabilmenizi ve çerçeveye özel bir şekilde test etmenizi sağlar.

4. Test Çiftleri Stratejik Olarak Kullanın

  • [FONT:0)Mocks[Döneticileri doğrulamak için , bir repository yöntemi doğru argümanlarla çağrıldı.
  • [FONT:0]Stubs[Döneticileri, bağımlılıktan önceden tanımlanmış cevaplar sağlamak için).
  • [FONT:0)Fakes[DÜDÜT:1) (örneğin, altyapı olmadan gerçekçi davranışlara ihtiyaç duyan entegrasyon testleri için bir in-memory veritabanı).

Aşırı uçtan kaçının: Eğer iş katmanı için bir test on arayüzü taklit etmek istiyorsa, katmanın çok fazla sorumluluk olduğunu gösteren bir işarettir.

5. CI/CD'de her seviyede Automate Testleri

Birim, entegrasyon ve son test paketleri oluşturun. Her iş üzerinde işlem testleri ( hızlıdır) Hızlı olarak yapılır.Çalışan taleplere ek olarak E2E testleri yapın. Bu katmanlı test stratejisi yüksek güven korurken hızlı geri bildirim sağlar.

6. Katmanlardan Ayrılma Endişeleri için Cross-Cutting Testleri

Giriş, kalibrasyon gibi endişeleri kesmek ve kimlik doğrulama sık sık sık çeşitli katmanlara dokunur. Bu, özel altyapı testleri kullanarak izolasyonu test etmek (örneğin, caching ortaware'in her katmanında çalıştığını test edin). Bu, kat testleri odaklanmış durumda.

7. Test Kodu Güvenli Kalabilir

Test yardımcıları, fikstürleri ve inşaatçılar füzyonu azaltmak için kullanın. Test dosyalarına karşı büyük veri nesneleri kopyalayın. Çünkü katmanlar ayrıdır, her katmanın arabirimleri için alayları ve test verilerini paylaşabilir, test paketini üretim kodu ile birlikte geliştirmek için daha kolay hale getirebilir.

Ortak Pitfalls ve Them'dan Nasıl Kaçırmak

Pitfall 1: Leaky Abstractions

Veri erişim katmanı ham SQL veya ORM-spesifik türleri ortaya çıkarır (örneğin, [[Dönetici Framework'te yer alan) iş tabakası, kalıcı teknolojiye çiftleşir. )Solution:

Pitfall 2: Aşırı Derin Katmanlama

Çok fazla katman eklemek (örneğin, ayrı bir “dönüşüm katmanı” veya “iş akışı katmanı”), önemli bir fayda olmadan karmaşıklığı artırabilir. )Çözü:) Üç katmanla başlayın ve sadece açık bir ayrılık gerekli olduğunda ekin.

Pitfall 3: Entegrasyon Testlerini Atla

Takımlar sadece, katmanların (örneğin, serileştirme farklılıkları, HTTP başlık kullanımı) arasındaki gerçek etkileşimdeki yanlış ve yanlış hataların testlerine güveniyorlar. )Solution:), gerçek sözleşmeleri egzersiz yapan entegrasyon testleri içerir, veritabanı veya dış hizmetler için hafif test konteynerleri.

Pitfall 4: Monolithic Katmanlar

Bir katman (iş mantığı katmanı) çok fazla sorumlulukla bir tanrı sınıfı haline gelir.ETHFLT:0)Çözü:[Dönetici:[Dönetici: 1) Split büyük hizmetler daha küçük, tek amaçlı sınıflara. Her sınıf tek bir neden olmalıdır, Tek Sorumluluk Prensibini takip etmek.

Gerçek Dünya Etkisi: Directus ile Bir Vaka Çalışması

Directus, çoklu veritabanı satıcılarını destekleyen bir sorgu üreticisi soyutlama ile inşa edilen açık kaynaksız içerik yönetim platformudur.The API katmanı (REST and GraphQL endpoints) delegates to service objects, which contains business rules for permissions, data validation, and activity entry.The data access katmanı uses a query construction abstraction that support multiple database satıcılar.

Bu yapı, Direktus ekibinin bir veritabanı olmadan tam olarak izin verme yetkisine izin verir: depo tabakasına alay ederler ve hizmetin ya da işlemleri rol konfigürasyonlarına dayalı olarak sürdürmelerine izin verir. Benzer şekilde, API uç noktalarının iade edilmesi durumunda doğru hata kodları geri döndürürler.Çünkü katmanları temiz bir şekilde ayrılırlar, test paketi hızlı ( saniyeler içinde çalışır) ve güvenilirdir.Bu katmanlı yaklaşım Directus düşük bir serbest bırakma oranları tutarken yüksek bir serbest bırakma oranların düşük olmasına yardımcı oldu.

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

Katmanlı mimari yeni bir model değildir, ancak test edilebilirlik ve otomatik test kapsamı için değeri rakipsiz kalır.Sorunlulukların ayrılması, açık arabirimler ve bağımlılık, her bileşenin izolasyonda test edilebilir olduğu bir kod tabanı oluşturur.Bu, daha yüksek kaliteli, daha hızlı geri bildirim döngülerine yol açar ve değişikliklere daha büyük bir güven sağlar. Direktus veya özel bir işletme uygulaması gibi bir içerik platformu inşa ederseniz, iyi katmanlı bir yapıya yatırım yapmak, yazılım yaşamı boyunca kar payı öder.

Katmanlarınızı ve arayüzlerini tanımlamak, bağımlılık enjeksiyonunu benimsemek ve bir tabakalı test stratejisi inşa etmek tarafından başlayın. Sonuç, sadece test etmek için daha kolay değil, aynı zamanda bakımı, uzatılması ve zaman içinde yeniden faktör oluşturmak için daha kolay olacaktır.

[0] Daha fazla okuma için Dış kaynaklar:

  • [0]Martin Fowler, Yazılım Mimarisinde ).
  • [0] Microsoft'un Ortak Web Uygulama Mimarilerine Rehberi).
  • [0]Temiz Mimarlık Robert C. Martin) tarafından
  • [0]) Test Piramiti Martin Fowler)
  • [FONT=0)Directus Mimarlık Genel Bakış[[Dön 1: 1)