Buna net bir cevap yok. Her ne kadar soru dar olsa da, açıklamalar değil.
Benim için, eğer istersen, Occam Razor gibi bir şey. Şu anki kodumu karşı ölçmeye çalıştığım bir ideal. Sade ve basit kelimelerle çivilenmek zor. Başka bir metafor, “tek bir konu« gibi soyut, yani kavraması zor bir konu ”olacak. Üçüncü bir tanım, “bir soyutlama düzeyi ile uğraşmaktır”.
Bu pratikte ne anlama geliyor?
Son zamanlarda çoğunlukla iki fazdan oluşan bir kodlama tarzı kullanıyorum:
Aşama I en iyi yaratıcı kaos olarak tanımlanır. Bu aşamada düşünceleri akarken kod yazarım - ham ve çirkin.
Faz II tam tersidir. Bir kasırgadan sonra temizlik yapmak gibidir. Bu en çok çalışmayı ve disiplini alır. Ve sonra kodu tasarımcının bakış açısından inceliyorum.
Çoğunlukla Python'da çalışıyorum, bu daha sonra nesneleri ve sınıfları düşünmeme izin veriyor. Birinci Aşama I - Sadece fonksiyonlar yazarım ve farklı modüllerdeki rastgele rasgele yayınlarım. II . Aşama'da işleri hallettikten sonra, hangi modülün çözümün hangi kısmı ile ilgilendiğine daha yakından bakıyorum. Ve modüller arasında gezinirken, başıma çıkan konular var. Bazı fonksiyonlar tematik olarak ilişkilidir. Bunlar dersler için iyi adaylar . Ve fonksiyonları sınıflara dönüştürdükten sonra - neredeyse girinti ile yapıldı ve python'daki self
parametre listesine ekledi ;) - SRP
Diğer modüllere ve sınıflara işlevselliği çıkarmak için Occam's Razor gibi kullanıyorum .
Mevcut bir örnek, geçen gün küçük ihracat işlevselliği yazıyor olabilir .
Bir zip içinde csv , excel ve birleştirilmiş excel sayfalarına ihtiyaç vardı .
Düz işlevsellik her biri üç görünümde yapıldı (= işlevler). Her işlev, filtreleri belirlemek için ortak bir yöntem ve verileri almak için ikinci bir yöntem kullandı. Daha sonra her bir fonksiyonda dışa aktarmanın hazırlığı yapıldı ve sunucudan bir Yanıt olarak teslim edildi.
Karışık birçok soyutlama seviyesi vardı:
I) gelen / giden istek / cevap ile ilgilenmek
II) filtrelerin belirlenmesi
III) veri almak
IV) verilerin dönüşümü
Kolay adım, exporter
birinci adımda II-IV katmanları ile başa çıkmak için bir soyutlama ( ) kullanmaktı .
Geriye kalan tek şey istek / cevaplarla ilgilenen konuydu . Aynı soyutlama seviyesinde , tamam olan istek parametreleri çıkarılıyor . Bu yüzden bu görüş için bir "sorumluluk" vardı.
İkincisi, ihracatçıyı bölmek zorunda kaldım, gördüğümüz gibi en az üç diğer soyutlama katmanından oluşuyordu.
Filtre kriterleri ve gerçek geri kazanımın belirlenmesi neredeyse aynı soyutlama seviyesindedir (verilerin doğru alt kümesini elde etmek için filtreler gerekir). Bu seviyeler veri erişim katmanı gibi bir şeye kondu .
Bir sonraki adımda, gerçek ihracat mekanizmalarını parçaladım: Geçici bir dosyaya yazmak gerektiğinde, bunu iki "sorumluluk" a böldüm: biri diske gerçek veri yazmak için, diğeri de asıl format ile ilgileniyordu.
Sınıfların ve modüllerin oluşumu boyunca, işler neye aitti, neye aitti. Ve her zaman gizli soru, sınıfın çok fazla yapıp yapmadığı .
Her sınıfın hangi sorumluluklara sahip olduğunu nasıl belirlersiniz ve SRP bağlamında bir sorumluluğu nasıl tanımlarsınız?
Takip edecek bir tarif vermek zor. Tabii ki şifreli »bir soyutlama seviyesini« tekrar edebilirim - eğer yardımcı olursa kural.
Çoğunlukla benim için mevcut tasarıma götüren bir tür "sanatsal sezgi" dir; Bir sanatçı gibi kod yapıyorum kil biçebilir veya resim yapabilir.
Beni Kodlayan Bob Ross ;) olarak hayal edin ;)