Değişim için Tasarım: SOLID İlkeleri Nasıl Enable Adaptive Engineering
Hızlı gelişen yazılım geliştirme dünyasında, değişmeye adapte olabilecek sistemler yaratmak artık istenmiyor - bu temelin oluşturulmasına yönelik olarak, tasarım ilkelerinin yalnızca kullanılabilir ve ölçeklenebilir hale getirilmesine yardımcı olmak için sistemler tasarlayın, yeni teknolojiler ve piyasa baskıları, sağlam bir temel talep eder.Pry tarafından tanıtıldı, mühendisler yeni özelliklerin tamamını basitleştirebilirler ve sürekli olarak sunulmasına olanak sağlar.Bu beş nesne odaklı tasarım ilkeleri, yalnızca kullanılabilir ve ölçeklenebilirlik sağlar.
Beş SOLID Prensipleri
SOLID, nesne odaklı tasarım beş temel ilkesini temsil eden bir acronymdir:
- [FONT=0)[Dönetici:0)
- [FONT:0)O[DÜT:1)
- [FONT:0)L[DÜT:1)
- [FONT:0)I – Interface Segregation Principles
- [FONT=0)D[D][D][/FONT=0)
Birlikte, modülerliği öncelikleyen bir tutarlı tasarım felsefesi oluştururlar ve endişelerin ayrılması. Kod bu ilkeleri saygılar olduğunda, her bileşen iyi tanımlanmış sözleşmeler yoluyla diğerleriyle etkileşime girer ve minimum dalga etkilerle değiştirebilir veya değiştirilebilir.In adaptive Engineering, this çevirileri büyük yeniden yazabilmeden yeni gereksinimleri absorbe edebilir, e-ticaret gibi hızlı-moving endüstrileri ile e-ticaret, fintech ve bulut hizmetleri gibi.
Tek Sorumluluk Prensi (SRP)
Tek Sorumluluk Prensipi, bir sınıfın sadece bir nedeni olduğunu belirtir. Uygulamada, bu, her sınıf, modül veya işlev, sistemin davranışının tek, iyi tanımlanmış bir yönünden sorumlu olmalıdır.Bir sınıf birden fazla sorumluluk ele aldığında, bir sorumluluğun ayrımına yol açar: Adaptif olmayan özelliklerin bir değişikliği.In adaptive Engineering, SRP is the first line of savunma against fragness.
[FONT:0)Example:[Dönetici:[Dönetici:0) Bir RaporGenerator sınıfı olarak her iki veritabanından veri toplayarak ve her biri HTML olarak çıktı.Eğer veri kaynağı değişiklikleri (örneğin, SQL API'ye dokunmadan) veri toplama mantığı istikrarlı kalır - ancak yine de aynı sınıfı değiştirmelisiniz.
SRP, kod değiştirme konusunda istenmeyen yan etkileri riskini azaltır. Ayrıca her sınıf net bir amaç vardır. Adaptif mühendislikte, gereksinimlerin genellikle bağımsız olarak geliştiği (örneğin, yeni çıktı formatlarını bir alanda değiştirirken), SRP, çalışma ve güncelleştirmeleri daha güvenli bir şekilde paralelleştirmeye olanak sağlar.
Açık / Kısa Prensip (OCP)
Open/Kasım Prensipleri, yazılım varlıklarının (klasik, modüller, fonksiyonlar) uzatma için açık olması gerektiğini ancak değişiklik için kapalı olması gerektiğini söylüyor. Başka bir deyişle, mevcut olmayan, test edilen kodu değiştirmeden yeni davranışları ekleyebilmeniz gerekir.Achieving OCP genellikle soyutlamaları (interfaces veya soyut sınıflar) ve polimorphic sentleri kullanarak içerir.
[FONT:0)Example:[Dönetici:[Dönetici:0) Bir ödeme işlemi sisteminde, kredi kartlarına ayrı sınıflarla başlayabilirsiniz.İş PayPal desteği eklerken, mevcut sınıf risklerini değiştirme kredi kartı mantığını tanımlar. Bunun yerine, bir OKT:2) yöntemi ile doğrudan bir uygulama ile arayüz oluşturabilirsiniz, sonra kredi kartının uygulanması için ayrı sınıflar oluşturabilirsiniz.
OCP özellikle uyarlanabilir bir mühendislikte güçlüdür. Takımların yeni özellikleri tanıtmalarını sağlar - Yeni bildirim kanalları, nakliye taşıyıcıları veya kimlik doğrulama mekanizmalarına destek gibi - halihazırda üretimde bulunan koda dokunmadan, geri dönüşüm olasılığını azaltırsınız.
Liskov Altung Prensliği (LSP)
Liskov Substitution Prensibi, bir süper sınıfın nesnelerinin programın doğruluğuna etki etmeden alt sınıfların nesnelerle değiştirilmesi gerektiğini iddia ediyor. Daha basit anlamda, alt sınıflar, temel sınıf tarafından kurulan sözleşmeyi onurlandırmalıdır: ön koşullar, ön koşullar güçlendirilmeli veya beklenmedik istisnalar atmalıdır.
[FONT:0)Example:[Dönetici:[Dönetici: · 1) Bu yöntemlerin her iki boyutu eşit tutmak için bir alt sınıf olduğunu varsayarsanız, doğru ve yüksek çözünürlükte bulunan bir yönteme göre, karenin uygulama işlemi iki katına çıkar.
LSP, uyarlanabilir bir mühendislik için kritiktir, çünkü polimorphism'in güvenilir bir şekilde çalışmasını sağlar.Bir uygulamayı başka bir şeyle değiştirirseniz (örneğin, LSP'ye takas etmek, kodunuzu öngörülebilir hale getirmek için, yeni sınıfın beklediğinden emin olmalısınız. LSP genellikle sadece belirli koşullar altında, ayarlanabilir sistemlere bağlı olarak yüzeye bağlı olan esnekliği ortadan kaldırır.
Interface Segregation Principles (ISP)
Interface Segregation Prensibi, müşterilerin kullanmadıkları arayüzlere bağımlı olmamalarını tavsiye ediyor. büyük, monolithic arayüzü yerine, birden çok daha küçük, daha spesifik arayüz tercih ediyor.Bu, sınıflara ihtiyaç duydukları yöntemleri uygulamaktan izin vermelerini sağlıyor.
[FONT:0)Example:[Dönetici:[Dönetici] Bir belge yönetimi sisteminde, aENFLT: 15) gibi yöntemler içerebilir, [[Üyetim: 16.03.2012||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ISS, doğrudan uyarlanabilir bir mühendislikle bağlantılıdır: sistemler büyüdükçe, gereksinimler genellikle yeni tür davranışları ekler. ISS olmadan, sadece sistemin birçok kısmına dokunan birkaç "gösteren" arayüzle sona erebilirsiniz.Bu davranışlardan herhangi biri değiştiğinde, potansiyel olarak tüm uygulamaları etkiler.In keeping arabirimleri küçük ve odaklanmış, değişiklikleri yarı yarıya sınırlandırabilirsiniz.Bu ilke aynı zamanda test ve alaycılığa da kolaylık sağlar.
Bağlanma Prensipleri (DIP)
Bağımlılık Prensipi iki temel parçaya sahiptir: yüksek seviyeli modüller düşük seviyeli modüllere bağlı olmamalıdır; her ikisi de soyutlamalara bağlı olmalıdır; ayrıntılar soyutlamalara bağlı olmalıdır. Diğer bir deyişle, arayüzlere veya soyut sınıflara beton uygulamalarından ziyade bağlıdır.
[FONT:0)Example:[Dönetici:[Dönetici: 0) Bir ► (örneğin, test için bir suç veya Redis önbellek) için bir uyarıda bulunmanız gerekir.
DIP test edilebilirliği ve adaptasyonu temel taşıdır. Adaptif mühendislikte, DIP'e uygun özel hizmetleri kaydetmenize izin verir - mesaj kuyrukları veya dış API'ler - iş mantığı üzerinde minimum etki ile. Birçok modern çerçeveler, bağımlılık enjeksiyon konteynerlerini otomatik olarak yönetmeye yardımcı olur. Directus, örneğin, DIP'ye uymaya izin verir, özel uygulamaları zorlamadan yeni özellikleri entegre etmek için basit hale getirir.
SOLID İlkeleri Adaptabilityability
SOLID ilkeleri, her sınıfın tek bir sorumluluğu olduğunda, değişiklikler yerelleştirilmiştir. Modüller genişlemeye açık ancak değişiklik için kapalı, yeni özellikler risksiz regresyonlar olmadan eklenebilir (DIP), tüm sistem farklı uygulamalara enjekte edilebilir bir kod tabanı haline gelir.Influences, bir davranışın sınırlı olmayan bir şekilde sınırlı olmayan bir şekilde değiştirilmesine bağlı olarak, doğrusal olmayan arayüzlere kıyasla değişkenlik gösterir.
Adaptasyon mühendisliği, SOLID'nin psikolojik etkisinden de faydalanır. Tasarımın ev sahipliği yapacağına güvenen geliştiriciler, deney, refaksiyon ve kod geliştirmek için daha isteklidir.Bu, takımların büyük ölçekli değişiklikler yapmasına olanak sağlar, bu da hızlı bir şekilde test etmek için daha kolay olur, çünkü her bileşen izole edilir ve daha fazla sözleşme yapar. Otomatik test süitleri daha fazla emboldens takım değişiklikleri yapmak için.
Modern Geliştirmede Pratik Uygulama
SOLID'ye karşı yeniden faktörleme
Birkaç kodbases mükemmel bir şekilde SOLID'ye başlıyor. İlkelerin en iyi şekilde yeniden faktörleme yoluyla uygulanır. Ortak adımlar, birden fazla sorumlulukla sınıfları tanımlamak ve onları bölmek, beton bağımlılardan gelen arayüzleri çıkarmak ve statik analiz gibi miras değiştirmek (örneğin, PHP, Python içinMD) yüksek darbe veya düşük kohesion gibi ihlalleri bayraklar.Bu tür kılavuzlar, emirleri kullanmak - bazen pragmatik bir ihlal küçük, istikrarlı modüller için kabul edilebilir.
SOLID ve Tasarım Desenleri
Birçok klasik tasarım desenleri, SOLID ilkelerinin doğrudan uygulamalarıdır. Örneğin, Strateji modeli, üçüncü taraf kütüphaneleri bütünleştirdiğinizde LSP'yi korumak için yeni stratejiler ekleyebilirsiniz. Ancak, DIP (kontext bir strateji arayüzüne bağlıdır).
Test-Driven Development
Test-Driven Development (TD) ve SOLID birbirlerini güçlendiriyor. Test için ilk kuvvetler, doğal olarak daha küçük, odaklanmış sınıflar (SRP) ve bağımlılık enjeksiyonu (DIP) Conversely, bir SOLID tasarımı, test için birimleri ayırmak için daha kolay hale getiriyor.
SOLID Hakkında Ortak Yanlışlar
Değerlerine rağmen, SOLID ilkeleri bazen yanlış yorumlanır. Bir yanlışlık, her durumda mektubu takip etmeleri gerekir.In fact, SOLID bir dizi kılavuzdur, katı yasalarla karıştıramaz. aşırı soyutlama ( sınıf patlama) veya prestij optimizasyonun her türlü tasarım problemlerini çözdüğüdür; aynı zamanda performans, koncurrency veya dağıtım gibi endişeleri ele alamaz.
Her prensibin arkasında yer alan her bir ilkenin ötesindeki eşitsizliğe cevap vermeme yardımcı olur: “Bu tasarım mevcut davranışı bozmadan değiştirmeye yardımcı olur mu?” Cevabınız evet ise, kod tam olarak kategoriye uymazsa bile, ilkelerin bağlamına adapte edilmesinden daha önemlidir.
Deeper Learning için Dış Kaynaklar
Daha fazla SOLID ilkeleri ve adaptif mühendislik keşfetmek için aşağıdaki yazar kaynakları ele alalım:
- [FONT:0]SOLID – Wikipedia[Dönetici:2]) - Tarihi bağlam ve eleştiriler dahil olmak üzere ilkelerin kapsamlı bir genel bakış.
- [FONT:0] Tasarım İlkeleri – Martin Fowler [Dönem:2])[değiştir | kaynağı değiştirmiş olan Martin Fowler tarafından, SOLID dahil olmak üzere nesne odaklı tasarım ilkeleri tartışmaktadır.
- [FONT:0] Modern Web Uygulamalarında Adaptif Mühendislik – Direktus) - SOLID gibi modüler tasarım ve ilkelerin nasıl düzeltildiğini keşfedin, hızlı çözümler sağlar.
Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç
Değişim için tasarım sadece teknik bir yetenek değildir - stratejik bir avantajdır. SOLID ilkeleri, yeni gereksinimleri, teknolojiler ve kullanıcı beklentilerini yeniden inşa edebilecek bir kod tabanı yaratır.Tek bir sorumluluk taahhüt ederek, yatırımın geri ödemesi, altüst arabirimleri ve doğrulanmış bağımlılıklar, sağlam, test edilebilir ve adapte edilebilir bir şekilde inşa edebilecek bir kod tabanı yaratırsınız.