Kod Güvenilirlik Maddeleri ve Nasıl SOLID Prensleri Yardım Ediyor

Her geliştirme ekibi aynı meydan okuma ile karşı karşıya kalır: Bağlanabilir bir kod hızla bağımlılık ve yan etkilere dönüşür.Robert C. Martin tarafından tanıtıldı, modüler, esnek ve gerçekten projelerde yeniden kullanılabilir yazılımlar için kanıtlanmış bir çerçeve sağlar.Bu beş ilkeye göre, yeniden yapılandırılabilir kodlar ve yan etkilere yol açar.

Beş SOLID İlkeleri bir Glance

SOLID acronym, onları nasıl yönetilmeli ve yeniden kullanılabilir bir yazılım oluşturmak için birlikte çalışan beş tasarım kılavuzu için duruyor.Her ilke nesne odaklı tasarıma özel bir bakış açısına hitap ediyor, sınıfların nasıl yönetileceği konusunda yapılandırılmalıdır.

  • [FONT=0) Tek Sorumluluk Prensi (SRP): Bir sınıf bir tane olmalı ve sadece bir tane, değişme sebebi.
  • [FONT:0) Açık / Kısa Prensip (OCP): ) Yazılım varlıkları uzatma için açık olmalıdır, ancak değişiklik için kapalı olmalıdır.
  • [FONT:0)Liskov Substitution Prensipleri (LSP): ), Alttipler programın doğruliğini değiştirmeden temel türlerine yönelik altüstte olmalıdır.
  • [FONT=0) Interface Segregation Prens (ISP): ) Müşteriler kullanmadıkları arayüzlere bağlı olmak zorunda kalmamalıdır.
  • [DIP:0)Dependency Invers Prensipleri (DIP): [DFLT:1) Yüksek seviyeli modüller düşük seviyeli modüllere bağlı olmamalıdır; her ikisi de soyutlığa bağlı olmalıdır.

Tek Sorumluluk Prensi: Bir Şey Yapan Bloklar

Tek Sorumluluk Prensibi, yeniden uygulanabilir kod temelidir. Bir sınıf birden fazla sorumluluka sahip olduğunda, bir sorumluluğu değiştirmek diğerlerini kırabilir.Bu, sınıf tunçunu ve davranışlarının yalnızca bir kısmının gerekli olduğu farklı bir bağlamda yeniden kullanılması zorlaşır.Her sınıfın değişmesi için, elde edilebilir bir mantık birimleri oluşturabilirsiniz, test edilebilir ve bağımsız olarak yeniden kullanılabilir.

Örneğin, hem veri doğrulama hem de veritabanı devam eden bir sınıf düşünün.Eğer farklı bir veritabanı kullanan başka bir projede geçerlilik mantığını yeniden kullanmak istiyorsanız, tüm sınıf veya geçerliliği manuel olarak kopyalamalısınız.Bu aynı zamanda üniteyi basit bir şekilde ayırarak iki sorunu da ayrı sınıflara ayırabilirsiniz: aİLMİŞT:0).

Uygulamada, SRP daha küçük sınıfları ve işlevleri teşvik eder. Yararlı bir heuristic şu soruyu sormaktır: "Eğer bu dersi bir cümlede tarif etmek gerekirse, başka bir projenin ilgili olmayan bir sorumluluğun olması gerekir mi?

Open/Kad Prensipleri: Yok Olmadan Geçin

Open/Kasım Prensipleri, yazılım varlıklarının genişlemeye açık olması gerektiğini belirtir, ancak değişiklik için kapalı olmalıdır.Bu, mevcut olmayan, test edilen kod değiştirmeden yeni işlevsellik ekleyebilmeniz gerektiği anlamına gelir.Mevcut dersleri yeni bir özellik eklemek için değiştirirken, geri dönüşümleri tanıtmak için riskinizi korursunuz. OCP büyümeye devam ederken, bu da zamanla yeniden ulaşılabilir kütüphaneler için gerekli olan geri dönüşümleri sağlamak için önemlidir.

OCP'yi uygulamak için en etkili yollardan biri, mevcut kodu değiştirerek yeni sınıflar oluşturmak için eklenmiştir. Örneğin, bir ödeme işlemine sahip bir yöntem veya farklı davranışlarla arayüz veya soyut bir sınıf tanımlamak ve somut uygulamalar sunmak. Yeni davranışlar, yeni bir ödeme yöntemi uygulamak yerine yeni bir ödeme yöntemi uygulamak için eklenir; mevcut bir işlem yöntemine sahip olabilir; mevcut koda uygun olarak kullanılabilir.

Bu yaklaşım doğrudan yeniden kullanılabilirliği geliştirir. Ödeme işleme mantığınızı bir kütüphaneye paketlediğinizde, diğer projeler bunu mümkün olduğunca kullanabilir veya değiştirilemez bir kod yazmak için sistemi genişletebilir.

Liskov Altung Prensi: Birlikte Çalışabilecek Değiştirilebilir Parçalar

Liskov Altung Prensi, elde edilen sınıfların program kırılmadan temel sınıflarını değiştirebileceğini garanti eder.Eğer alt sınıf LSP'yi ihlal ederse, temel sınıfa dayanan kod, alt sınıf bir örnek verildiğinde başarısız olur.For reusability, LSP kritiktir, çünkü bir taban türü ile çalışmak için tasarlanmış bir bileşeninin proje veya özel uygulamadan bağımsız olarak çalışır.

LSP'nin klasik bir ihlali karek köşeli problemdir.Eğer bir GÜNCELT:6'ye sahipseniz, üst ve yüksekliğe ayrılan istemci kodu, bu ihlal güçleri, özel olarak kontrolleri sağlamak için alt sınıftır.

LSP'ye uymak için, arayüzlerinizi ve temel sınıflarınızı bir temel türe dayanan temel sınıfları tasarlayın. Tasarım-by-uzay tekniklerini kullanın: Ön koşullar, ön koşullar ve değişmezler. Alt sınıflar bu sözleşmeleri onurlandırmalıdır. LSP, temel bir türe dayanan yeniden kullanılabilir bir bileşen yaratırken, LSP herhangi bir iyi niyetli alt sınıfın işe yarayacağını garanti eder.

Interface Segregation Principles: Small, Focused Contracts

Interface Segregation Prensi, müşterileri olmayan davranışlar arasında sıkılaştırmaya ve bu sınıfı büyük arayüzleri daha küçük, daha spesifik olanları bölmeye zorlayan yöntemlere karşı uygulama sağlamaları gerektiğini tavsiye eder.

PDF, CSV ve HTML raporları oluşturmak için yöntemleri olan bir arayüz düşünün. Sadece PDF raporları oluşturmak için gereken bir sınıf, CSV ve HTML yöntemlerine bağlı olmak zorunda kalır. Bu sadece sınıfları anlamak için daha zor hale getirir, ancak aynı zamanda arayüz geliştiyse kırılma riskini artırır.

ISS, bu bileşenlerin minimum bağımlılıklarını sağlamakla doğrudan yeniden kullanılabilirliği destekler. Yeniden testlerde yeniden kullanılabilir bir kütüphane tasarlarken, küçük arayüzler tüketicilerin yalnızca ihtiyaç duydukları parçaları uygulamalarına izin verir.Kullanılan yöntemler için aynı soruları kullanmaya zorlanırlar.Bu, kütüphanenizi yeni bir projeye entegre ettiğinden daha da azaltır.

Bağımlılık Prensipleri: Özetlere bağlı olarak, Kıtlamalara bağlı değil

Bağımlılık Prensipleri, bağımlılıkların geleneksel yönünü döndürür. Yüksek seviyeli modüller yerine, her ikisine de soyutlamalara bağlı olarak uygulamalarınızı değiştirebilirsiniz. Bu, iş mantığının veritabanı, dosya sistemleri veya dış API gibi altyapı ayrıntılarına sıkı bir şekilde çiftleştirilmemesi gerektiği anlamına gelir.

Örneğin, bir kullanıcı kayıt hizmeti doğrudan bir Natasha veritabanı sınıfına bağlı olmamalıdır. Bunun yerine, bağımlılık olarak bilinen bir arayüz tanımlayın, farklı veri depolarını kullanan projelerde yeniden kullanım için aynı kayıt mantığına izin verir. Kayıt hizmeti bu arayüze bağlıdır.ZFLT:15 gibi.

DIP ayrıca kod daha test edilebilir hale getirir, ki bu dolaylı olarak yeniden kullanılabilirlik sağlar.Reusable bileşeninizin gerçekten de izolasyonda hareket ettiğini doğrulayabilirsiniz. Bu, bileşeninizin çevrede çalışacağına dair diğer takımlara güven verir. DIP, Repository kalıbı, Strateji modeli ve adaptör kalıbı dahil olmak üzere birçok tasarım deseninin arka kemiğidir.

İlkeleri birleştirmek: Yeniden Tanımlanan Sistemleri yaratan Synergy

SOLID ilkeleri izole edilmez; birbirlerini güçlendiriyorlar. SRP, doğal olarak küçük arayüzlere yol açan sınıfları yaratır (ISP) OCP, LSP'ye doğru alt kurum için bağlı olarak, DIP, her şeyi bir araya getirir.

Uygulamalı bir yaklaşım SRP ve ISS ile başlamaktır.Ana Sayfanızda temel sorumlulukları tespit etmek ve her biri için dar arabirimler tanımlamak için DIP'i işletme mantığınızı bu arayüzlere bağlı hale getirmek için kullanın.Yeni davranışın mevcut kodu değiştirmeksizin eklenebileceğini tasarlamak için OCP kullanın. Son olarak, sınıf hiyerarşilerinizi LSP'ye yerleştirerek uygulamalarınızı yerine getirmek için DIP'e bağlı olarak uygulamanız gerekir.Bu iş akışı doğal olarak yeniden kullanılabilir kütüphanelere paket haline getirmek için daha kolaydır.

Ortak bir yanlış anlama, SOLID ilkeleri sadece nesne odaklı diller için geçerlidir. Gerçekte, kavramlar işlevsel programlamaya, mikro hizmetlere ve hatta API tasarımına iyi bir yol açıyor. temel fikir - paraate endişelere bağlı olarak, özetlere bağlı olarak ve genişlemeye bağlı olarak - evrensel olarak bir JavaScript faydalı modül yazsanız, bir Go paketi veya bir Python kütüphanesi, SOLID, projeler arasında iyi seyahat eden kod oluşturmak için bir yol haritası sunar.

Ortak Pitfalls, Reusability için SOLID'i Ne Zaman Uygulamalı

SOLID'nin güçlü bir anlayışıyla bile, geliştiriciler genellikle her sınıftaki her prensibi zayıflatan hataları yaparlar, ancak ortaya çıkan geri dönüşlere ihtiyaç duyduklarını uygulamak.

Başka bir tuzak bağımlılıkların maliyetini ihmal ediyor. büyük bir çerçevede veya kütüphanede çeken yeniden kullanılabilir bir bileşen, farklı bir yığın kullanan projelerde yeniden uygulanabilir olmayabilir.İzminiyetlerinizi minimum tut ve standart kütüphane özelliklerini veya küçük, odaklanmış paketleri tercih edin.Bu uyumsuzluğa sahip olan bu hizalamalar, tüketicilere istenmeyen bağımlılıklara bağlı olarak güvenmemelidir.

Test genellikle göz ardı edilir. Güvenilir kod iyice test edilmelidir çünkü doğrulayıcı her projeyi kullanır. Test olmadan, bir bileşeninin yeni bir bağlamda doğru şekilde davrandığını garanti edemez. Her sınıf için izolasyon, entegrasyon testleri, uygulamalarını doğrulayabilmeleri için, arayüzleri doğrulayın. Otomatik testler güvenli hale getirir.

Son olarak, dokümantasyon konuları. En temiz SOLID kodu bile, diğer geliştiricilerin nasıl kullanılacağını veya genişletmediğini anlamadığı konusunda işe yaramaz. Her arayüzün sorumluluklarını belge, yöntemlerin beklenen davranışını ve çevre hakkında varsayımları içerir.

Gerçek Dünya Örneği: Yeniden Bildirim Kütüphanesi Oluşturmak

SOLID'yi eylemde görmek için, bir kanal parametresi ile kullanılabilir bir bildirim kütüphanesi inşa etmeyi hayal edin. Kütüphane farklı kanalları desteklemeli: e-posta, SMS, bildirimler itin ve tüm olası kanallara bağlı olmak zor olacaktır.

SRP'yi uygulayın, sorumluluklarınızı ayırıyorsunuz: birFLT:18, bu işlemi sadece DIP'i kullanarak yeni bir kanalla idare ederseniz, OCP'ye yönelik yeni bir sınıf yazın.Son olarak LSP, herhangi birFLT: 9'u uygular.

Sonuç, herhangi bir projenin kullanabileceği bir kütüphanedir. Sadece e-postanın mevcut kodu değiştirmeden eklenebilir ve esnek olan koda geçiş yapın. Birden çok kanala ihtiyaç duyan bir proje birkaç gönderici kayıt altına alabilir.

Bugün SOLID'i kullanmaya başlamak için Pratik Adımlar

Eğer SOLID'ye yeniyseniz, küçük bir ilke seçin ve tek bir sınıf veya modüle uygulayın. Farklı davranışlarla ve LSP'yi altstituting uygulamaları ile doğrulayan bir sınıf refaksiyonu (SRP) yapın.

Sahtekarlıkları tespit etmek için statik analiz araçları ve linters kullanın. Birçok modern IDE'ler, arayüzleri çıkarmak, yöntemleri çekmek ve kod kokularını tanımlamak için yeniden teşvik etmek için destek sağlayacaktır. Kod yorumları da SOLID bağlılıklarını tartışmak için mükemmel bir fırsat.

Daha fazla okuma için, bu yazara dayalı kaynakları tasarım ilkeleri ve nesne odaklı tasarım üzerine keşfedin: ESRAT:0) Robert C. Martin'in SRP) üzerindeki orijinal makalesi, [[Dönetici ilkelerine Giriş[Döneticileri hakkında ayrıntılı bir genel bakış açısı sağlayan Wikipedia Girişi[Döneticileri ve [[Döneticileri)

Ölçme Reusability: Nasıl başarılı olduğunu bilmek

SOLID çabalarınızın ödemesini nasıl biliyorsunuz? One metric, mevcut arayüzleri değiştirmeniz gereken kolay, bu yüzden bir sınıf veya modül ayırmak için birkaç saatten fazla sürerse, tasarımınız muhtemelen paylaşılan kütüphanelerdeki bir veya daha fazla SOLID prensiplerini ihlal eder.AID tasarımı mevcut arayüzleri değiştirme ihtiyacını en aza indirir.

SOLID ilkelerine uymayan kod, daha yüksek test kapsaması ve daha az böcek tasarlama eğilimindedir. Soykırımlara bağlı olduğunda, suçsuz kodların önemli bir kısmını en az adaptasyonla yeniden kullanabilmeniz için, ekibinizin yeni özellikler ve iş mantığına odaklanması için ortak bir kelime geliştirmesi gerekir.

SOLID ilkeleri gümüş bir mermi değildir, ancak kodunuzu yeniden kullanılabilirliğe yönlendirmek için kodunuzu yönlendiren kanıtlanmış bir dizi kılavuzdur.Onlara daha da fazla bir şekilde başlayın ve kodbase'in esnekliği, kullanılabilirlik ve çapraz proje portability'inizde somut gelişmeler göreceksiniz.