Katmanlı Yazılım Sistemlerindeki Endişelerin Ayrımının Anlanması

Endişelerin ayrılması (SoC), yazılım mühendisliğindeki en kalıcı ve etkili ilkelerden biridir.Bir sistemin ayrı bölümlere bölünmesine yol açıyor, her biri genel işlevsellikten sorumlu, iyi tanımlanmış bir şekilde inceleniyor.Dekansız yazılım sistemleri - mimarinin sunumu, iş mantığı ve veri erişimi gibi yatay tierse nasıl organize edildiğini - SoC'nin etkili bir şekilde uygulanması, ölçeklenebilirlik, ölçeklenebilirlik ve netlik.Bu makale, etkili farklılıkların arkasındaki temel ilkeleri araştırıyor.

Onun özünde, SoC karmaşıklığı yönetmek üzeredir. Farklı endişeler ile sistemin herhangi bir kısmını anlamak için gerekli olan bilişsel yükü azaltırsınız. Değişiklikler daha güvenli ve daha hızlı hale gelir, test daha hedeflenir ve sistem gelişmekte olan gereksinimleri tanımlamak için daha dirençli hale gelir.

Endişelerin Ayrılığı Nedir?

Endişelerin ayrılması, bir yazılım sisteminin, 1974 yılında Edsger Dijkstra tarafından "bilimsel düşüncenin rolü" olarak ikiye katlanması gerektiğini dikte eden bir tasarım prensibidir.Her bir kısım -bir modül, sınıf, tabaka veya işlev - belirli bir endişe veya sorumluluktan vazgeçmelidir.

Uygulamada, SoC, bir bileşene baktığınızda, bir şeyi değiştirmeniz gerektiğinde amacını açıklığa kavuşturabilmeniz gerekir: e-postaların mantıkla nasıl bir şekilde değiştirilmesi gerektiğini değiştirmek.

Core Principles of effective Ayrılık

Katmanlı sistemlerde endişelerin etkili bir şekilde ayrılması için, birkaç birbirine bağlı ilkeye uymanız gerekir.Her biri diğerlerini güçlendiriyor ve birlikte kullanılabilir yazılımların temelini oluşturur.

Tek Sorumluluk Prensi (SRP)

Çoğu zaman SoC'nin temel taşı olarak kabul edilir, Single Sorumluluk Prensipleri Bir modülün, sınıfın veya katmanın sadece bir tane değiştirme sebebine sahip olması gerekir.Bir katmanda, bu, her katmanın tek, iyi tanımlanmış bir rolü olması gerekir. Sunum katmanı kullanıcı etkileşimi; iş mantığının etkilendiğini belirtir; Kullanıcı girişi katmanının devam etmesi gerekir.Repoleksiyon ve kullanım kurallarının "sa" ve "taraf" için birden fazla referans noktası vardır.

Katmanlı Mimari

Katmanlı mimari, SoC. sistemlerinin yapısal embodimenti, her biri belirli bir rol ve iyi tanımlanmış bir arayüz ile kendi bitişik katmanlarına iletişim kurmaktır.En yaygın desen üç katmanlı: sunum katmanı (UI), uygulama katmanı (iş mantığı), ve veri katmanı (eski) daha karmaşık sistemlerde, hizmet, alan ve altyapı gibi ek bir tabakalar tanıtılır.

Encapsulation

Encapsulation, SoC. ile el ele geçer. Her katman veya modül iç uygulama detaylarını saklamalı ve yalnızca diğer katmanların onunla etkileşime girebilmesi için gerekli olan şeyleri ortaya çıkar.Bu, istenmeyen darbeyi önler ve bir tabakalı sistemde, veri erişimi katmanının etkilenmesini önler.Incapsulate all SQL sorguları ve şema ayrıntılarının arkasındaki veri katmanını doğrudan ifade eder.

Özet

Özet, düşük seviyeli uygulama ayrıntılarıyla üst düzey politikayı ayırır.Bu örnek olarak, bir "PaymentService" arayüzü, PayPal için ne kadar bir bileşeninin olduğunu belirtmenize izin verir.In katmanız sistemlerde, soyutlama işlemi genellikle arayüzler veya soyut arabirimler ile yapılır, herhangi bir özel sağlayıcı ile ilgili sözleşmelerde bulunur.Bu örnek, herhangi bir esnektir: yeni ödeme sağlayıcıların anahtarı değiştirmeden önce tanıtılması için bir yöntem oluşturabilirsiniz.

Loose Coupling

Lool darbesi, katmanların ve bileşenleri arasındaki bağımlılıkları minimuma indirmek anlamına gelir, böylece bir kısımdaki değişiklikler diğerleriyle ilgili en az etkiye sahiptir.Derinleme katmanında, yalnızca bir servis arayüzü aracılığıyla iş mantığı katmanına doğrudan erişim sağlar; iş mantığı katmanına bağlı olarak yalnızca veri katmanına bağlı olarak konuşurlar.

Bu İlkeleri Uygulamanın Faydaları

Prensipler değerli olsa da, gerçek ödemeoff, bir yazılım projesinin yaşam döngüsü boyunca teslim ettikleri avantajlardan geliyor. Her bir faydayı ayrıntılı olarak inceleyelim.

Geliştirilmiş Koruma

Endişeler temizlendiğinde, bakım görevleri yerelleştiriliyor. Veri formatlamada bir hata sunum katmanında sabitlenir; vergi hesaplama kurallarında bir değişiklik yalnızca işletme katmanını değiştirir. SoC olmadan, görünüşte basit bir değişiklik, birden çok katmandan ayrılabilir ve tüm yığını anlamayı ve değiştirmeyi gerektirir.Bu, sınırsız işlevsellik riskini arttırır.

Geliştirilmiş Scalability

Katmanlı mimariler sadece performans açısından değil, aynı zamanda takım organizasyonunda da geçerlilik açısından değil, aynı zamanda uygulama katmanında bağımsız olarak farklı katmanlarda çalışabilirsiniz. Örneğin, bir ön ekip iş mantığı ve veri erişimi olmadan sunum katmanını geliştirebilir. Performanslama da fayda sağlar: Uygulama katmanından bağımsız olarak farklı katmanlarda skalayı ölçekleyebilirsiniz.If your application experiences a lead in reading requests, you can add more read replicas of the database without the business logic code. Conly, if computation becomes the user application.

Daha iyi Testability

Bu tabakalar, veri katmanı için bağımsız olarak test veya entegrasyon testleri kullanılarak test edilebilir. Örneğin, iş mantığı tabakasının tanımlanması basit hale gelir: veri katmanı için bir test çift sağlayabilir ve iş mantığı süreçlerinin verileri doğru bir şekilde doğru şekilde doğru şekilde doğru şekilde doğru şekilde doğru şekilde doğru şekilde doğru şekilde doğru şekilde doğru şekilde ölçebilir (TD) uygulama, kodu uygulamadan önce test edebilirsiniz.

Artan Reusability

Bir tek, iyi tanımlanmış bir endişe ile tasarlandığında, farklı projelerde veya aynı projede yeniden kullanım için doğal adaylar haline gelir. İyi bir "EmailNotificationService" çoklu özelliklerde kullanılabilir. "UserRepository" arayüzü, birçok giriş kullanıcıya veriye erişmesi gereken herhangi bir bileşen tarafından yeniden kullanılabilir, yönetici paneli veya API doğrulama modülünde, API uç noktası olmadan yeniden tasarlanabilir.Reusability duplikasyonu azaltır ve teşvik eder.In a content management system like Directus, many of the extensions and API endpoints are built on this basic services with the core services without the API endpoint.

Common Pitfalls Kaçmak için

En iyi niyetlerle bile, geliştiriciler genellikle endişelerin ayrılmasına engel oluyor. Bu tuzakların farkındalığı temiz bir mimari korumak için çok önemlidir.

Over-Mühendislik ve Prematür Özeti

Bir ortak hata, gerekli olan beş tabakayı anlamadan önce çok fazla katman veya soyutlama yaratıyor. Bu, problem domaininiz için anlamlı bir karmaşıklığa yol açıyor ve "You Ain't Gonna Need It" (YAGNI) ile başlayın. Sonuç, basit bir istekte bulunun beş tabakayı yanlış anlamanın gerekli olduğunu anlayan bir sistem olabilir.

Leaky Abstractions

Uygulama detaylarını tamamen saklamayı başaran soyut bir yaklaşım, “seçmiş” olarak adlandırılır, hammadde bazlı hataları geri döndüren bir depo arayüzü, iş katmanını veritabanına özel endişelerle işlemek için kendi istisna türlerini tanımlamanız gerekir.Bu çiftler iş mantığını bu şekilde kullanmak için, soyutlamaların domain-özel hataları yakalama ve tercüme etmek için tasarlanmıştır. Bazı durumlarda, iş katmanınızı kendi istisna türlerini tanımlamak için ihtiyacınız olabilir.

Anemic Domain Model Modeli

Bazen, SoC çok fazla alınır, tüm iş mantığının ayrı hizmet sınıflarına taşındığı bir anemik alan modeli ile sonuçlanır, bu tür basit veri sahiplerinin davranışsız olarak hareket etmesi gerekir.Bu, birçok hizmette iş mantığını da dağıtabilir, bu da çoğu zaman "zengin alan modeli" yaklaşımı olarak tanımlanabilir.

Ortak Devletle Sıkıntılı Çift Katmanlar

Başka bir pitfall, katmanlar arasında boş bir durum paylaşıyor. Örneğin, küresel bir singleton'ı moderatörlerin de gizli darbeler getirdiği bir iş katmanını modları ile iletişim kurmaları için açık bir şekilde veri aktarımı nesneleri (DTO'lar) kullanarak verileri aktarabilir.

Directus'ta Pratik Uygulama

Directus, bir başsız CMS ve geri dönüş çerçevesi olarak, doğrudanus için tartışılan ilkelerin çoğunu genişletir.Ana runtime veri erişim ve izinleri yönetirken, uzantıları ve hizmetleri - doğrudan tanımlanmış sınırları içinde çalışır.

Örneğin, özel bir uç noktası oluştururken, iş mantığından (servasyon) ve veri erişimi (repository) ile ilgili olarak, veritabanı istemci ve önbellek katmanına bağımlılık sağlar, ancak geçerli bir yedek sorguya girmeniz gerekir, ancak geçerli olan kodda sadece bir işlemden önce, hizmeti güncelleştirme mantığına uymanız gerekir.

Directus ayrıca, yaşam döngüsü olayları üzerine ateş eden kancaları da destekliyor (örneğin, bir öğe oluşturulduktan sonra). SoC'yi korumak için, bir kanca eliler bu olay tarafından başlatılan iş mantığını yeniden ele almalıdır.

Ayrıca, Directus'un izni sistemi, veri erişimi ve iş mantığı arasındaki ayrımı uygular. Kullanıcılar ve roller, hangileri görebilir ve yapabilirler ve herhangi bir veri işlemi yapmadan önce bu izinleri okur.Özel mantık inşa ettiğinizde, izinleri onları atlamak yerine kontrol ederek aynı modele saygı göstermelisiniz.

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

Katmanlı yazılım sistemlerindeki endişelerin etkin bir şekilde ayrılması, opsiyonel bir mimari güzel değildir - işbirliğine dayanıklı ve dostça olan bina sistemleri için kritik bir uygulamadır.Tek sorumluluk ilkelerine, tabakalı mimariye, enkapsülasyona, soyutlamaya ve gevşek darbeye dayalı olarak, geliştiriciler işbirliğine karşı dayanıklı kodbazlar yaratırlar.

Bir sonraki sistemi tasarlarken veya mevcut olanı genişletin, bu ilkeleri Wikipedia'da mı çalışıyorsunuz?)Martin Fowler'in Katmanlı Mimaride Tartışması) Robert C. Martin'in tek Sorumluluğu üzerine yaptığına göre[Döneticileri) daha ayrıntılı bilgi edin.