Son zamanlarda bir kod incelemesi sırasında, kokulu bir desen içeren yeni bir meslektaşım tarafından yazılmış bir kodla karşılaştım. Meslektaşımın kararlarının ünlü Temiz Kod kitabı (ve belki de diğer benzer kitaplar) tarafından önerilen kurallara dayandığından şüpheleniyorum.
Sınıf kurucusunun geçerli bir nesnenin yaratılmasından tamamen sorumlu olduğunu ve ana görevinin bir nesnenin (özel) özelliklerinin atanması olduğunu anlıyorum. Elbette isteğe bağlı özellik değerlerinin sınıf yapıcısı dışındaki yöntemlerle ayarlanabileceği ortaya çıkabilir, ancak bu tür durumlar oldukça nadirdir (sınıfın geri kalanının böyle bir özelliğin seçeneğini dikkate alması şartıyla mutlaka yanlış olmasa da). Bu önemlidir, çünkü nesnenin her zaman geçerli bir durumda olmasını sağlar.
Ancak, karşılaştığım kodda, çoğu özellik değerleri aslında yapıcı dışında başka yöntemler tarafından ayarlanır. Hesaplamalardan kaynaklanan değerler, sınıf boyunca birkaç özel yöntemde kullanılacak özelliklere atanır. Yazar görünüşte sınıf özelliklerini, bu değerleri gereksinim duyan işlevlere parametreleştirmek yerine sınıf boyunca erişilebilir olması gereken küresel değişkenler gibi kullanıyor. Ayrıca, sınıfın yöntemleri belirli bir sırayla çağrılmalıdır, çünkü sınıf başka bir şey yapmaz.
Bu kodun büyük parametre listelerinden (<3 parametre) kaçınmak için yöntemleri kısa tutma (<= 5 satır kod) tavsiyesinden esinlendiğinden ve yapıcıların (bir çeşit hesaplama yapmak gibi) çalışmaması gerektiğinden şüpheleniyorum nesnenin geçerliliği için gereklidir).
Tabii ki, yöntemler belirli bir sırayla çağrılmadığında her türlü tanımlanmamış hatanın potansiyel olarak ortaya çıkabileceğini kanıtlayabilirsem, şimdi bu kalıba karşı bir dava yapabilirim. Ancak, buna yanıtın, bu özelliklerin ayarlanması gereken yöntemler çağrıldıktan sonra özelliklerin ayarlanması gerektiğini doğrulayan doğrulamalar ekleyeceğini tahmin ediyorum.
Bununla birlikte, sınıfın (yordamsal olarak) belirli bir sırayla çağrılması gereken bir dizi yöntem yerine, gerçek bir nesneye mavi bir baskı haline gelmesi için kodu tamamen değiştirmeyi öneriyorum.
Karşılaştığım kodun koktuğunu hissediyorum. Aslında, ne zaman bir sınıf özelliğinde bir değer kaydetmek ve ne zaman kullanmak için farklı bir yöntem için bir parametreye koymak için oldukça açık bir ayrım var inanıyorum - gerçekten birbirlerine alternatif olabilir inanmıyorum . Bu ayrımın kelimelerini arıyorum.