Bunu daha önce yaptığın şekilde yap derdim. Örneğinizdeki parametre sayısı çok fazla değil, ancak alternatifler çok daha korkunç.
Harita - Bahsettiğiniz verimlilik meselesi var, ancak buradaki daha büyük sorun:
- Arayanlar
başka bir şeye atıfta bulunmadan size ne göndereceklerini bilemezler ... Tam olarak hangi anahtarları ve
değerlerin kullanıldığını mı? Eğer yaparsanız (ki bu harika), o zaman birçok parametreye sahip olmak da sorun olmaz.
- Farklı argüman türlerini kabul etmek çok zorlaşır. Giriş parametrelerini tek bir türle sınırlayabilir veya Map <String, Object> öğesini kullanabilir ve tüm değerleri atayabilirsiniz. Her iki seçenek de çoğu zaman korkunçtur.
Sarmalayıcı nesneler - bu, yalnızca sarmalayıcı nesnesini ilk etapta doldurmanız gerektiğinden sorunu taşır - doğrudan yönteminize değil, parametre nesnesinin kurucusuna olacaktır. Sorunun taşınmasının uygun olup olmadığını belirlemek, söz konusu nesnenin yeniden kullanımına bağlıdır. Örneğin:
Kullanmaz mıydı: İlk aramada yalnızca bir kez kullanılacaktı, yani 1 satırla ilgilenmek için çok fazla ek kod ...?
{
AnObject h = obj.callMyMethod(a, b, c, d, e, f, g);
SomeObject i = obj2.callAnotherMethod(a, b, c, h);
FinalResult j = obj3.callAFinalMethod(c, e, f, h, i);
}
Kullanabilir: Burada biraz daha fazlasını yapabilir. İlk olarak, 3 yöntem çağrısı için parametreleri çarpanlarına ayırabilir. kendi içinde başka 2 satırı da gerçekleştirebilir ... yani bir anlamda durum değişkeni olur ...
{
AnObject h = obj.callMyMethod(a, b, c, d, e, f, g);
e = h.resultOfSomeTransformation();
SomeObject i = obj2.callAnotherMethod(a, b, c, d, e, f, g);
f = i.somethingElse();
FinalResult j = obj3.callAFinalMethod(a, b, c, d, e, f, g, h, i);
}
- İnşaatçı kalıbı - bu benim görüşüme göre bir anti-modeldir. En çok arzu edilen hata işleme mekanizması, daha sonra değil, daha erken tespit etmektir; ancak oluşturucu modeliyle, eksik çağrılar (programcı bunu eklemeyi düşünmedi) zorunlu parametreler derleme zamanından çalışma süresine taşınır. Elbette, programcı yuvaya kasıtlı olarak boş veya benzeri bir şey koyarsa, bu çalışma zamanı olacaktır, ancak yine de bazı hataları daha önce yakalamak, çağırdıkları yöntemin parametre adlarına bakmayı reddeden programcılar için çok daha büyük bir avantajdır. Bunu yalnızca çok sayıda isteğe bağlı parametre ile uğraşırken uygun buluyorum ve o zaman bile, fayda en iyi ihtimalle marjinaldir. İnşaatçı "modeline" çok karşıyım.
İnsanların göz önünde bulundurmayı unuttukları bir diğer şey de tüm bunlarda IDE'nin rolü. Yöntemlerin parametreleri olduğunda, IDE'ler sizin için kodun çoğunu oluşturur ve size ne sağlamanız / ayarlamanız gerektiğini hatırlatan kırmızı çizgiler vardır. 3. seçeneği kullanırken ... bunu tamamen kaybedersiniz. Şimdi doğru yapmak programcıya kalmıştır ve kodlama ve derleme sırasında hiçbir ipucu yoktur ... programcı öğrenmek için test etmelidir.
Ayrıca, 2 ve 3 numaralı seçenekler, gereksiz yere yaygın olarak benimsenirse, ürettiği büyük miktarda yinelenen kod nedeniyle bakım açısından uzun vadeli olumsuz sonuçlara sahiptir. Ne kadar çok kod varsa, bakımı o kadar çok olur, onu korumak için o kadar çok zaman ve para harcanır.