To pytanie na temat SO mówi o poprawieniu tego, co według OP jest kodem zazdrości funkcji . Innym przykładem, w którym widziałem cytowanie tej fajnej frazy, jest ostatnio udzielona odpowiedź tutaj w programmers.SE. Chociaż dodałem komentarz do tej odpowiedzi, prosząc o informacje, które - jak sądzę - byłyby przydatne dla programistów po pytaniach i odpowiedziach, aby zrozumieć, co oznacza termin „zazdrość o funkcje” . W razie potrzeby edytuj dodatkowe tagi.
53
Odpowiedzi:
Zazdrość o cechy to termin używany do opisania sytuacji, w której jeden obiekt trafia na pola innego obiektu w celu wykonania jakiegoś obliczenia lub podjęcia decyzji, zamiast prosić obiekt o wykonanie obliczeń.
Jako trywialny przykład rozważ klasę reprezentującą prostokąt. Użytkownik prostokąta może potrzebować znać jego obszar. Programista może ujawnić
width
iheight
wypełnić pola, a następnie wykonać obliczenia pozaRectangle
klasą. EwentualnieRectangle
mógłby zachowaćwidth
iheight
pól prywatnych i zapewnićgetArea
metodę. Jest to prawdopodobnie lepsze podejście.Problem z pierwszą sytuacją i powodem, dla którego jest uważany za zapach kodu, jest taki, że przerywa on enkapsulację.
Zasadniczo, za każdym razem, gdy często korzystasz z pól innej klasy do wykonywania dowolnej logiki lub obliczeń, rozważ przeniesienie tej logiki do metody w samej klasie.
źródło
Może się zdarzyć, że użycie innych metod klasy / struct będzie w porządku - gdy twoja klasa / struktura jest pojemnikiem na dane. Zwykle niewiele można zrobić z tymi danymi bez kontekstu zewnętrznego.
Takie klasy mogą nadal zawierać pewną wewnętrzną logikę, ale częściej są używane jako kontenery:
@jhewlett w swojej odpowiedzi odwołuje się do tego artykułu, aby udowodnić, że nie powinieneś intensywnie wykorzystywać innych członków klasy, ale istnieje inny kod pachnący sytuacją opisaną tam z rzecznikami mojego przykładu:
źródło