Wskoczyłem do projektu i widzę, że inni programiści dodają dużo logiki w ustawieniach zsyntetyzowanych właściwości. Rozumiem, jak to działa, ale myślę, że utrudnia to zrozumienie przebiegu programu; podczas czytania kodu, za każdym razem, gdy widzę self.something = whatever
, zawsze sprawdzam, czy something
setter jest przesłonięty.
Jakie są twoje opinie na ten temat? Czy uważasz, że jest to oznaką złej architektury lub skomplikowanego rozwiązania?
Z przyjemnością przeczytam więcej na ten temat, jeśli masz odpowiednie linki / źródła, zbyt trudno jest uzyskać dobre wyniki wyszukiwania w Google, więc postanowiłem również zapytać tutaj.
Dziękuję za każdą odpowiedź i pamiętaj, że mówię o celu C na wypadek, gdybyś nie widział tagu (nawet jeśli nie powinien to być problem specyficzny dla języka).
Odpowiedzi:
Nie
Wymyślono właściwości, aby umożliwić projektantom klas dołączenie logiki do wygodnego interfejsu dostępu do pola i przypisywania.
Jak dużo jest za dużo? To zależy od obowiązków klasy. Oto kilka rzeczy, które można rozsądnie umieścić w narzędziu do ustawiania właściwości:
Programowanie jest łatwiejsze, gdy klasy mają interfejsy, dzięki którym oczywiste jest, co klasa może zrobić, bez wywoływania przez osoby dzwoniące przemyślenia na temat tego, jak się to odbywa. Umieszczenie logiki za ustawiaczami właściwości pozwala klasom ukryć ich implementację za prostym interfejsem. W przypadku niektórych klas nie są wymagane żadne metody. Wystarczy przekręcić pokrętła, ustawiając właściwości i odczytać dane wyjściowe, uzyskując właściwości.
źródło
Setery są zwykle używane do zmiany stanu obiektu bez znaczących efektów ubocznych lub ciężkich obliczeń; do tego celu należy używać metod i funkcji. Podstawowym powodem implementacji settera jest zmiana i utrzymanie prawidłowego stanu . Tak więc ograniczenie zakresu, ustawienie flag w celu żądania ponownego obliczenia lub dostosowanie powiązanych właściwości jest absolutnie w porządku.
źródło
Nie wiem o celu C, ale jak mówisz, wydaje się dość ogólne pytanie dla każdego języka OO. Przede wszystkim i tak naprawdę związane z tym, czy posiadanie seterów i getterów jest przede wszystkim kwestią dyskusyjną (w niektórych przypadkach ich istnienie jest uzasadnione przez użycie frameworka lub biblioteki).
Uważam, że nazwa metody powinna wyjaśniać jej działanie i całą metodę. Dodatkowo dokumentacja związana z tą metodą powinna opisywać ją w bardziej wyraźny sposób. W tym sensie nazwa metody w postaci „set” + {rzecz.} Nie powinna mieć żadnych skutków ubocznych poza ustawieniem wartości zmiennej i powinna to być jedyna akcja z nią związana. Sprawdzanie poprawności argumentu jest dopuszczalne, ale należy je opisać w jego dokumentacji.
źródło