Tabii ki, YAGNI prensibi SRP'yi gerçekten ihtiyaç duymadan önce uygulamanızı söyleyecektir. Ama kendinize sormanız gereken soru şudur: SRP'yi önce ve sadece kodumu gerçekten değiştirmek zorunda kaldığımda mı uygulamalıyım?
Deneyimlerime göre, SRP uygulaması size çok daha erken bir fayda sağlar: kodunuzda belirli bir değişikliği nerede ve nasıl uygulayacağınızı ne zaman öğrenmeniz gerektiği . Bu görev için mevcut işlevlerinizi ve sınıflarınızı okumalı ve anlamalısınız. Tüm fonksiyonlarınızın ve sınıflarınızın belirli bir sorumluluğu olduğunda bu çok daha kolay hale gelir. IMHO, SRP'yi kodunuzun okunmasını kolaylaştıracak, işlevlerinizi daha küçük ve kendi kendini tanımlayan hale getirdiği zaman uygulamanız gerekir. Bu nedenle cevap evet , yeni kod için bile SRP uygulamak mantıklı.
Örneğin, yazdırma kodunuz bir belgeyi okuduğunda, belgeyi biçimlendirdiğinde ve sonucu belirli bir aygıta yazdırdığında, bunlar 3 ayrı ayrı ayrılabilir sorumluluktur. Bu yüzden bunlardan en az 3 işlev yapın, isimlere göre verin. Örneğin:
void RunPrintWorkflow()
{
var document = ReadDocument();
var formattedDocument = FormatDocument(document);
PrintDocumentToScreen(formattedDocument);
}
Biçimlendirme değişikliği belgeye yeni bir gereklilik veya PDF yazdırmak için başka bir tane Şimdi, bilirsin tam olarak koduna bu işlevlerin veya konumların hangi noktada değişiklikleri uygulamak zorunda ve daha da önemlisi, nerede değil.
Eğer bir işleve gelip zaman fonksiyonu "çok fazla" yapar, çünkü Yani, anlamıyorum ve bir değişikliği uygulamak için nerede ve, eğer emin değilseniz o zaman ayrı, daha küçük fonksiyonlarına işlevini refactor düşünün. Bir şeyi değiştirmek zorunda kalana kadar beklemeyin. Kod, değiştirilenden 10 kat daha sık okunur ve daha küçük işlevlerin okunması çok daha kolaydır. Deneyimlerime göre, bir fonksiyonun belirli bir karmaşıklığı olduğunda, gelecekte hangi değişikliklerin olacağını bilmeksizin, fonksiyonu her zaman farklı sorumluluklara bölebilirsiniz. Bob Martin tipik olarak bir adım daha ileri gider, aşağıdaki yorumlarımda verdiğim bağlantıya bakın.
DÜZENLEME: yorumunuza: Yukarıdaki örnekte dış işlevin temel sorumluluğu, belirli bir aygıta yazdırmak veya belgeyi biçimlendirmektir - yazdırma iş akışını tümleştirmektir . Bu nedenle, dış işlevin soyutlama düzeyinde, "dokümanlar artık biçimlendirilmemelidir" veya "yazdırılan yerine dokümanın postalanması gerekir" yalnızca "aynı nedendir" - yani "yazdırma iş akışı değişmiştir". Böyle şeyler hakkında konuşursak, doğru soyutlama seviyesine bağlı kalmak önemlidir .