Üç Layer Mimarisi: Robust Uygulamaları için Bir Vakıf

Modern yazılım geliştirmesinde, bir uygulamanın mimarisi uzun vadeli koruma, ölçeklenebilirlik ve güvenilirliklerini belirler.En kalıcı ve yaygın olarak kabul edilen desenler arasında üç katmanlı mimaridir, bu da üç ayrı ayrı ayrı ayrı ayrı ayrı ayrılığa sahiptir: 0)Örnek, Katman)

Bu tabakaların iletişimin sadece akademik bir egzersiz olmadığını anlamak - doğrudan özellikleri ne kadar hızlı bir şekilde ekleyebilirsiniz, böcekleri nasıl kolayca düzeltebilirsiniz ve sistem ölçeklerinizi yük altında tutar. Her katman temel görevlerine odaklandığında, tüm kodbase, test ve evrimleşmek için daha kolay hale gelir.Bu endişelerin ayrılması, basit tek sayfa uygulamaları karmaşık sistemlere nasıl basit bir şekilde dağıtabilirsiniz.

Aşağıda, her katmanı ayrıntılı olarak parçalıyoruz, etkileşimlerini keşfedin ve bu mimariyi kendi projelerinde uygulamak için pratik rehberlik sağlayacaktır. Ayrıca referans yazar kaynaklarına da değineceğiz - örneğinDirectus mimarisi belgeleri –) gerçek araçlardaki kavramlar.

Sunum Katmanı: Kullanıcılar Kodlarla Nerede buluşuyor

Sunum Katmanı uygulamanızın görünür yüzüdür. Kullanıcının gördüğü ve etkileşime girdiği her şeyi idare eder - ekranlar, formlar, panjurlar, düğmeler ve gerçek zamanlı bildirimleri. birincil sorumlulukları, veriyi insan hazırlayıcı bir formda sunmak ve kullanıcı girişinin işleme için geri gönderilmesini içerir.

Roller ve Sorumluluklar

Tipik bir web uygulamasında, Sunum Katmanı HTML, CSS, JavaScript (veya Reaks, Vue veya Angular gibi bir çerçeve) ve ilişkili herhangi bir medya varlıkları olarak adlandırılır. genellikle [[Ücretsiz:0)UI katmanı veya )

  • [FONT:0]Döneticileri [Döneticileri Göstermek İçindeki İş Mantık Katmanı'ndan alınan bilgiler, tablolar, grafikler veya kartlar.
  • [[Dönetici:0)Köpektr giriş[[Döncükler, arama barları ve kullanıcı eylemlerini toplayan etkileşimli öğeler.
  • [FONT:0) Geri bildirim[[[Dönder: Yükleme spinnerleri, hata mesajları, en küçüklere başarı ve geçerli ipuçları göster.
  • [FONT:0]Managing state: UI Eyaletinin (örneğin, hangi sayfa aktif, kullanıcı tipi) iş kurallarıyla karıştırmaksızın.
  • [[Döneticileri[Döneticileri)[Döneticileri: Ekran okuyucularına veya klavye navigasyonuna güvenenlere ait tüm kullanıcılar için çalışan arayüzler tasarlayın.

İyi hazırlanmış bir Sunum Katmanı, aşağıdaki katmanda bulunan herhangi bir yardım veya veri dönüşümün en az mantığı içermelidir.

Modern Frontend Desenler

Popüler çerçeveler, UI ve ilişkili davranışların bir parçası haline getirir, onları izolasyonda test etmek için kolay hale getirir.The Popüler çerçeveler, Vue, and Angular component-based architectures. components encapsulate a part of UI and its associated behavior, make it easy to replica and test them in partition. State management library (Redux, Pinia, Vuex) daha fazla farklı UI state from business logic, reincing the katman limits.

Modern araçlarla bile, geliştiriciler doğrudan şablonda veya bileşende iş kuralları yerine getirme konusunda istekliliğe karşı direnmelidirler. Örneğin, bir kullanıcının bir indirim için ayarlanmaması gereken bir işlem olarak, bir düğmeye tıklamayın. Sunumu tutun "dumb", arayüzü yeniden tasarlanabilir veya hatta başka bir ön uç ile değiştirilebilir.

İş Mantık Katmanı: Uygulamanın Beyini

Genellikle [[0)Templeksiyon tabakası[DÜT:1) veya [[Dönetici tabakası[DÜDÜDÜyetim:2) olarak adlandırılır[Dönetici Katmanı, alan kuralları, hesaplamalar, geçerlilikler ve iş akışları canlısı olarak yapılır. Sunum Katmanı'dan ham giriş alan aracı olarak davranır ve veri Katmanı ile ilgili kısıtlamaları uygular.

İş Mantıkında Ne Belongs

  • [FONT:0]Validations[[Dönler: 1 ): Bir e-posta adresinin doğru formatta olduğunu kontrol etmek, bir kullanıcının gerekli izinlere sahip olması veya bir ürün miktarı envanteri aşmaz.
  • [FONT:0)Calculations[[Dönler: Toplamlar, vergiler, nakliye maliyetleri veya fiyat fiyat kurallarına göre indirim miktarları.
  • [FONT:0)Workflow orkestration[Dönetici: Ödeme, en düşük envanter, onay e-postası gibi çok adımlı süreçleri yerine getirmek.
  • [[Dönetici:0)Yazma kuralları[[Dönetici: Belirli bir kullanıcı veya rol bir eylem gerçekleştirmeye izin verilir.
  • [FONT:0)Data dönüşümü[[DÜT:1): Sunuma ulaşmadan önce veya veri formatlandırmak veya veri depolamaktan sonra.

Eleştirel olarak, İş Mantık Katmanı hem kullanıcı arayüzünden hem de veritabanı teknolojisine tamamen bağımsız olmalıdır. Bu bağımsızlık, bir tarayıcı veya bir veritabanına dönmeden iş kurallarını test etmenize olanak sağlar. Ayrıca ön uçları takas edebilirsiniz (örneğin, bir web uygulamasından mobil bir uygulamaya) veya geri dönüş veritabanına (örneğin, PostgreSQL'den MongoDB'ye) değiştirmenizi sağlar.

Common Implementation Strategies

Birçok sunucunun çerçevelerinde, iş mantığı hizmet sınıflarında veya kullanım nesneleri kullanır. Örneğin, aİLFLT:0) bir yöntem içerebilir, kart onaylar, toplamı hesaplar, herhangi bir kupon uygular, bir ödeme geçit çağırır ve bir sipariş onay döndürür.Bu yöntem, bir HTTP isteğinden, bir komut satırı senaryosu veya bir kuyruk çalışanının veya bir sonucun uygun verileri alabilir veya döndürür.

Bir kafasız CMS gibi:0)Directus[Dönetici: İş Mantık Katmanı genellikle bir yaratımla genişletilebilir; Bir e-posta bildirimi[Dönetici 3) veya [[Dönemli mantık, örneğin, bir öğe oluşturulmadan önce, geçerli bir bağlantı kuramaz.

Veri Katmanı: Persistan Memory

Data Katmanı, uygulama verilerinin depolama ve geri dönüşlerini yönetir. Altta depolama mekanizmasından soyutlanır - bu bir ilişkisel veritabanı, NoSQL mağazası, bir dosya sistemi veya dış API'si – ve İş Mantık Katmanı için temiz bir arayüz sağlar.

Core Functions

  • [FONTD işlemleri[[Dönetici: 1): Oluşturun, oku, güncelleme ve kayıtları tutarlı bir şekilde silin.
  • [FONT:0)Data Whole[[DÜT:1): Sınırlama kısıtlamaları (aslı anahtarlar, yabancı anahtar ilişkiler, gerekli alanlar) depolama seviyesinde.
  • [FONT:0) Güvenlik[DÜT:1): SQL enjeksiyonunu önlemek, hassas verileri şifrelemek ve erişim kontrollerini yönetmek.
  • [FONT:0)Performance[[Dönetici: Indexing, query Optimizasyon, caching ve bağlantı havuzu yüksek aktarım ile yüksek kullanım için.
  • [FONT:0]Migration management[Dönetici: Takip şemaları zamanla değiştirir, böylece güncellemeler güvenli bir şekilde çevreler arasında uygulanır.

Veri Katmanı bir sözleşme ortaya çıkarmalıdır - İş Mantık Katmanı bir şekilde kullanılabilir:0.) veya )[FONTNT][/FONT)[FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=

İş Mantıkından Ayrılma

Ortak bir hata, veri toplamak için bir SQLULLT:5 yazmak için veritabanı sorgularını karıştırıyor.Eğer bu veritabanı değişiklikleri de hesaplıyorsa, iş kuralları tam bir araya getiren bir repository yöntemi aramalıdır.For example, write a SQLurFLT:5).If the database schema changes, only the repository changes - the business rules stay souched.

Directus projesinde, Data Katmanı büyük ölçüde platformda yerleşik veritabanı soyutlamaları tarafından yönetiliyor. Directus, PostgreSQL, SQLite, MSSQL, Oracle ve MongoDB. Geliştiriciler, Directus SDK veya REST/GraphQL API'leri hammadde işlemlerinin ham SQL yazmadan elde edebilir. Gelişmiş kullanım koşulları için, özel SQL görüşleri veya depolama prosedürleri hala katı tutmazken entegre edilebilir.

Katmanlar Nasıl Birleşin: Tipik Bir İstek-Response Döngüsü

Bir tabakalı mimarinin büyüsü, tam bir kullanıcı etkileşimi ekran yenilemeye tıkladığımızda açık hale gelir.Bir web uygulaması üzerinde profillerini güncelleyen bir kullanıcı düşünün:

  1. [[Dönetici:0)Öyleleme Katmanı[DÜT:1): Kullanıcı, yeni verilerle bir form ve tıklamada doldurur.
  2. [[Fabrika:0)API Gateway / Router[[Dönetici: 1 ): İstek, uygun eller veya kontrol için hangi para yüküne ve ileriye doğru yol açar.Bu kontrolör hala çok katmanlı bir kurulumda API katmanının bir parçasıdır.
  3. [FONT=0)İş Mantık Katmanı): Hizmet yöntemi (örneğin, 03.03.2012) alan geçerliliği gerçekleştirmek için bir havuz çağırın: e-postanın zaten kullanımda olmadığını kontrol edin, kullanıcının kendi profilini değiştirme izni olduğunu kontrol edin, muhtemelen kurallara dayanan yeni değerleri hesaplamak için izin verir.If validation pass, it calls a repository method to maintain the changes.
  4. [FONT:0)Data Katman[DÜT:1): Reository bir SQLETHFLT:8) komut veya bir ORM yöntemi çağırın. Veritabanı kısıtlamaları (örneğin, eşsiz bir e-posta) ve bir başarı veya hata döndürür.
  5. [FONT:0)Back through the stack[[Dönetici: İş Mantık Katmanı depodan gelen yanıtın tamamını alır, herhangi bir post-işlem (örneğin, değişikliği, bir önbellekleme) kaydeder ve kontrole temiz bir sonuç döndürür.
  6. [[Dönetici:0)Öylege Katman cevabı[[DÜT 1: 1): Kontrol, JSON (veya HTML) sonucu seriliyor ve ön sürüme geri gönderir. UI'yi güncelliyor, başarı mesajını gösteriyor ve kullanıcı yeni profil bilgilerini görüyor.

Bu akış, her katmanın tek, iyi tanımlanmış bir sorumluluğu nasıl olduğunu gösterir. UI ekibi profili yeniden tasarlamak istiyorsa, sadece ön uç kodu değiştirmek gerekir; geri uç noktaları geçerli bir profil değişiklikleri oluşturan şey için iş mantığı, sadece hizmet katmanı güncellenir ve her iki ön uç ve veritabanı etkilenmez.

Asynchronous ve Event-Driven Interactions

Tüm etkileşimler senkronize edilmez. Birçok modern uygulama mesaj kuyrukları, webhooks veya olay odaklı mimarileri kullanır. Örneğin, bir kullanıcı bir profil resmi yüklerken, İş Mantık Katmanı “projektif edilmiş bir resim gönderebilir” bir özel hizmet bu olaya kulak verir ve devretme süresine saygı duyar.

Bir Well-Designed Three-Layer Mimarisinin Faydaları

Sunum, iş mantığı ve veriler arasındaki açık sınırları benimsemek, somut avantajlar sağlar:

  • [FONT:0]Testability: İş mantığı, bir UI veya veritabanına ihtiyaç duymadan, bir UI veya bir veritabanına ihtiyaç duymadan izolasyonda test edilebilir. Data katmanı testleri doğrulığa ve performansa odaklanabilir. Sunum testleri UI davranışını bağımsız olarak doğrulayabilir.
  • [FONT:0]Maintainability): Bir otobüs bulunduğunda, geliştiriciler bunu belirli bir katmana hızla yerelleştirebilirler. Etki kapsamını azaltmak daha hızlı ve daha güvenli hale getirir.
  • [FONT:0]Scalability[DÜT:1]: Katmanlar bağımsız olarak ölçeklenebilir. Örneğin, bir okuma-heavy işlemi bir şişenck olur, veri Katmanına kopyalayabilirsiniz veya UI'ye dokunmadan caching ekleyebilirsiniz.
  • [FONT:0]Flexability[[Döneticiler, tüm uygulamayı yeniden yazmaksızın teknolojileri değiştirebilirler. Bir başlangıç, bir monolithic üç katmanlı uygulama ile başlayabilir ve daha sonra İş Mantık Katmanını mikro hizmetlere bölebilirken, tüm aynı cepheyi tutarken.
  • [FONT:0] Takım işbirliği[[Döneticiler, geri dönüşümlü geliştiriciler ve veri mühendisleri açıkça tanımlanmış sözleşmelerle paralel olarak çalışabilirler (APIs, arabirimler, veri şemaları). Bu, çatışmaları azaltır ve teslimatları azaltır.

Directus'u kullanan takımlar için, bu avantajlar özellikle de telaffuz edilir. Directus, uzatma sistemini temizleyen bir fartogram olarak tasarlanmıştır.Bu, üç katmanlı mimari ile mükemmel bir şekilde uyum sağlar (Data Katman + bazı Business Logic via hooksentation Katman) ön uçtan (Sunum Katmanı). platform, sağlam bir veri Katmanı kutusunun dışına sağlar ve geliştiriciler uzatma sistemini kullanarak özel iş mantığını kullanır.

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

Leaking Business Logic into the Presentation

Bu en sık ihlaldir. Bir geliştirici bir reaksiyon bileşenine indirim hesaplamasını kopyalayabilir çünkü bir API'yi aramaktan daha kolaydı, ön uç ve geri dönüş senkronize edilen kullanıcı deneyimlerinden dolayı senkronize edilebilir. ”|0Solution).

Veritabanına Sıkıca Koupling Business Logic to the Database

ORM'nin özel kodunu kullanarak (örneğin Active Record patternleri gibi) doğrudan iş mantığı görünmez bir bağımlılık yaratır.Eğer daha sonra bir ORM'den hammadde veya veri tabanına geçiş yaparsanız, refaksiyon iş koduna yeniden giriş yapmanız gerekir.[/FLT:0).Solution).

Hatayı Katmanlar'da Tutuyorum

Her katman sorumluluğuna uygun hataları ele almalıdır. Veri Katmanı bir veritabanı istisnası atabilir; İş Mantık Katmanı onu yakalamalı ve bir alan seviyesindeki istisnaa çevirmelidir (örneğin, [[Dönetici 9); Sunum Katmanı bunu yakalamalı ve bir kullanıcı dostu mesajı göstermelidir.

Erken Onda

Çok basit bir uygulama için (örneğin, statik bir blog), tam üç katmanlı bir mimari ile depolayıcılar ve hizmetler aşırı uçabilir. ancak, gerekli olduğunda, sadece zor veritabanları için planlanması gerekir).

Sonuç: Bir Tasarım Olarak Katmanlama

Algıtma Katmanı[0)Örnek: 0 (Dönetici)[Dönetici:2)İş Mantık Katmanı) ve [[Döntme: 4))Data Katman[Dönetici:0)[Dönetici:|yaplama, günlük gelişim kararlarına karar veren pratik bir disiplindir.

Sürekli olarak endişelerin ayrılması için, ölçeklendirme, uzatma ve adapte olmak için daha kolay olan sistemleri yaratırsınız. Yeni ekip üyeleri belirli mantıka bakmak için nerede olduğunu bilirler, sistem kullanıcı arayüzünü değiştirebilir, iş kurallarını değiştirebilir veya veritabanını sürekli olarak değiştiremezler.

Küçük bir iç araç veya büyük ölçekli bir SaaS ürünü inşa etmek, katmanlarınız arasındaki açık sınırları tanımlamak için zaman ayırın.Bu sınırları saygı gösteren çerçeveler ve platformlar – Directus gibi, bu da temiz bir veri API'si ve iş mantığı için uzatma noktaları sağlar.

Mimari desenler hakkında daha fazla okuma için, Martin Fowler'in [[0) Uygulama mimarisine rağmen ) ve resmi olarak [Dönergesel mimari genel bakış[[[Döntme:2).