Bazen (nadiren), makul miktarda parametre alan bir işlev yaratmanın en iyi yol olduğu görülmektedir.
Birkaç parametrenin kullanılması genellikle bu yöntemde SRP'yi ihlal ettiğinizin açık bir göstergesidir . Birçok parametreye ihtiyaç duyan bir yöntemin tek bir şeyi yapması pek mümkün değildir . Ekspetiyon, matematiksel bir fonksiyon veya aslında birkaç parametreye ihtiyaç duyulan bir konfigürasyon metodu olabilir . Şeytan kutsal sudan kaçınırken birden fazla parametreden kaçınırdım. Bir yöntem içinde ne kadar çok parametre kullanırsanız, yöntem o kadar yüksek, yöntemin karmaşık olması da o kadar olası; daha karmaşıklık şu anlama gelir: bakımı daha zor ve bu daha az arzu edilir.
Ancak, yaptığım zaman, sık sık parametrelerin sıralamasını rastgele seçtiğimi hissediyorum. Genelde en önemli parametre olan ilk önce "önem sırasına" bakarım.
Priniple'da rastgele seçiyorsunuz . Elbette , A parametresinin B parametresinden daha alakalı olduğunu düşünebilirsiniz ; ancak B'nin en alakalı parametre olduğunu düşünen API'nizin kullanıcıları için durum böyle olmayabilir . Öyleyse siparişi seçme konusunda dikkatli olsanız bile - diğerleri için rastgele görünebilir .
Bunu yapmanın daha iyi bir yolu var mı? Netliği artıran parametreleri sipariş etmenin "en iyi uygulama" yolu var mı?
Bunun birkaç yolu vardır:
a) Önemsiz durum: Birden fazla parametre kullanmayın.
b) Belirlemediğiniz gibi, hangi dili seçtiğiniz, adlandırılmış parametrelerle bir dil seçme şansınız var . Bu, paramters sıralamasının önemini gevşetmenize izin veren hoş sözdizimsel şekerdir :fn(name:"John Doe", age:36)
Her dil, bu tür güzellere izin vermez. O zaman ne?
c) Parametre olarak bir Dictionary / Hashmap / Associative Array kullanabilirsiniz : örneğin Javascript, aşağıdakilere izin verir: fn({"name":"John Doe", age:36})
(b) den çok uzakta olmayan.
d) Elbette, Java gibi statik olarak yazılmış bir dille çalışıyorsanız. Bir Hashmap kullanabilirsiniz , ancak HashMap<String, Object>
parametreler farklı türlere sahipken (ve kullanmanız gerektiğinde) tip bilgisi (örneğin birlikte çalışırken ) kaybedersiniz .
Bir sonraki mantıksal adım Object
(Java kullanıyorsanız) uygun özelliklere sahip veya bir yapı gibi daha hafif bir şey (örneğin C # veya C / C ++ yazarsanız ) iletmek olacaktır .
Başparmak kuralı:
1) En iyi durum - yönteminiz hiç parametre gerektirmez
2) İyi durum - yönteminiz bir parametreye ihtiyaç duyar
3) Tolere edilebilir durum - yönteminiz iki parametreye ihtiyaç duyar
4) Diğer tüm davalar yeniden düzenlenmeli
MessageBox.Show
. Buna da bak.