Bizim kod temeli eski ve yeni programcılar, benim gibi, hızla bunu yapmak öğrenmektir bitti yolu bütünlüğü uğruna. Bir yerden başlamak zorunda olduğumuzu düşünerek, bir veri tutucu sınıfını yeniden yansıtmak için kendime verdim:
- Setter yöntemleri kaldırıldı ve tüm alanları yaptım
final
(aldığımfinal
"aksiyomatik olarak " iyidir ") Belirleyiciler, yalnızca kurucuda kullanıldı, göründüğü gibi, bunun hiçbir yan etkisi olmadı. - Builder sınıfı tanıtıldı
Oluşturucu sınıfı gerekliydi çünkü yapıcı (ilk başta yeniden yönlendirmeyi isteyen şeydi) yaklaşık 3 satırlık bir kod satırı içeriyor. Çok fazla parametresi var.
Şansa sahip olacağı gibi, bir takım arkadaşım başka bir modül üzerinde çalışıyordu ve ayarlayıcılara ihtiyaç duyuyordu, çünkü gerekli olan değerler akışta farklı noktalarda bulunuyordu. Böylece kod şöyle görünüyordu:
public void foo(Bar bar){
//do stuff
bar.setA(stuff);
//do more stuff
bar.setB(moreStuff);
}
Bunun yerine yapıcıyı kullanması gerektiğini savundum, çünkü ayarlayıcılardan kurtulmak, alanların değişmez kalmasına izin veriyor (daha önce değişmezlik konusunda çılgınca duyduğumu duymuşlardı) ve ayrıca inşaatçılar nesne oluşturmanın işlem yapmasına izin verdiği için de. Aşağıdaki sahte kodu çizdim:
public void foo(Bar bar){
try{
bar.setA(a);
//enter exception-throwing stuff
bar.setB(b);
}catch(){}
}
Bu istisna ortaya çıkarsa, bar
bir oluşturucudan kaçınılması gereken bozuk verilere sahip olur:
public Bar foo(){
Builder builder=new Builder();
try{
builder.setA(a);
//dangerous stuff;
builder.setB(b);
//more dangerous stuff
builder.setC(c);
return builder.build();
}catch(){}
return null;
}
Ekip arkadaşlarım, söz konusu istisnanın hiçbir zaman ateşlemeyeceğini, bu belirli bir kod alanı için yeterince adil olduğunu, ancak ağaç için ormanın eksik olduğuna inanıyorum.
Uzlaşma eski çözüme geri dönmek, yani parametresiz bir yapıcı kullanmak ve gereken her şeyi ayarlayıcılarla ayarlamaktı. Bunun sebebi, bu çözümün benimkinin ihlal ettiği KISS ilkesini izlemesiydi.
Bu şirkette yeniyim (6 aydan az) ve bunu kaybettiğimin tamamen farkındayım. Sahip olduğum soru (lar):
- "Eski yöntem" yerine Oluşturucular'ı kullanmanın başka bir argümanı var mı?
- Önerdiğim değişiklik gerçekten buna değer mi?
ama gerçekten,
- Yeni bir şeyler denemeyi savunurken bu tür argümanları daha iyi sunabilmek için herhangi bir ipucunuz var mı?
setA
?