W firmie, w której pracuję, jest dokument opisujący dobre praktyki, których powinniśmy przestrzegać w Javie. Jednym z nich jest, aby unikać metod, które zwracają this
, jak na przykład w:Co jest złego w zwrocie?
class Properties {
public Properties add(String k, String v) {
//store (k,v) somewhere
return this;
}
}
chciałbym mieć taką klasę tak, że jestem w stanie napisać:
properties.add("name", "john").add("role","swd"). ...
Widziałem takie idiom wiele razy, jak w StringBuilder
i nie znajduj w tym nic złego.
Ich argumentacja jest:
... może być źródłem problemów z synchronizacją lub nieudanych oczekiwań dotyczących stanów obiektów docelowych.
Nie mogę wymyślić sytuacji, w której może to być prawda, czy którykolwiek z was może dać mi przykład?
EDIT Dokument nie precyzuje nic o zmienności, więc nie widzę diference pomiędzy łańcuchowym połączeń i idzie:
properties.add("name", "john");
properties.add("role", "swd");
Postaram się skontaktować z pomysłodawców , ale chciałem to zrobić z załadowanymi pistoletami, dlatego napisałem to pytanie.
SOLVED: Muszę porozmawiać z jednym z autorów, jego pierwotnym zamiarem było najwyraźniej w celu uniknięcia uwalniania przedmiotów, które nie są jeszcze gotowe, jak we wzorcu Builder, i wyjaśnił, że jeśli przełącznik kontekst dzieje się między połączeniami, obiekt może być w nieprawidłowym stanie. Przekonywałem, że nie miało to nic wspólnego z powrotem do systemu, ponieważ mógłbyś popełnić ten sam błąd, wywołując metody jeden po drugim i miał więcej do czynienia z prawidłową synchronizacją procesu budowania. Przyznał, że dokument może być bardziej wyraźny i wkrótce to zmieni. Zwycięstwo jest moje/nasze!
"Problemy synchronizacji"? Nie mogę sobie wyobrazić, jak to by z tego powstało (kalambur nie jest zamierzony, ale tolerowany). Podobnie jak prawie wszystkie inne wzorce ma dobre zastosowania i niewłaściwe wykorzystanie, ale nie rozumiem tego, jakie masz uzasadnienie. Może poproś autorów tego dokumentu o wyjaśnienia. –
Istnieje inny post o tym na http://stackoverflow.com/questions/1345001/is-it-bad-practice-to-make-a-setter-return-this – Walid
Nie rozumiem tej argumentacji. –