Jeśli ktoś pisze kod, aby wewnętrzna zmienna $ _fields była dostępna bez korzystania z metod getter / setter, czy istnieje odpowiedni termin, aby to opisać?
Coś na tyle grzecznego, by korzystać z zarządzania :)
terminology
scope
PeterB
źródło
źródło
Odpowiedzi:
Ujawnianie prywatnych członków nigdy nie jest dobre w uprzejmym społeczeństwie ...
Ta praktyka to brak / słabe kapsułkowanie.
źródło
private
) ma jeszcze jedną implementację pojęcia enkapsulacji.__
do zmiany nazwy). Inne języki mogą mieć również słabą enkapsulację, np. Odbicie w Javie i arytmetyka wskaźnika w C ++, aby uzyskać prywatne zmienne. Python po prostu nie sprawia, że składnia jest tak uciążliwa.__
nazw. Bez__
tego projekt nadal odzwierciedla dobre kapsułkowanie. Twierdzenie, że „publiczne” oznacza „brak / słabe kapsułkowanie” jest błędne. Koncepcja jest nadal obecna. W kodzie źródłowym brakuje odpowiedniej dekoracji.Poza brakiem enkapsulacji wspomnianym już przez Odeda, w zależności od języka programowania i jego paradygmatów, może to być również „zwykłe stare dane” (gdzie niekoniecznie jest to zapach antypatternowy lub kodowy).
źródło
Słyszałem już wcześniej termin „nagi przedmiot”.
źródło
Nazywa się to torbą nieruchomości.
Zwykle służy do przechowywania zestawu może powiązanych właściwości (gdzie każda z nich może potencjalnie być obiektem klasy, który ma odpowiednie specyfikatory dostępu lub nie). Ale otaczająca go struktura to tylko torba właściwości.
źródło
Nazywa się to „nieprzestrzeganiem określonego standardu kodowania”.
OP napisał:
Może to być niezgodne z twoim standardem i (a więc) może to być zapach kodu. Ale niekoniecznie jest to słaba enkapsulacja. Wystawienie zmiennej zewnętrznej (jak w „tylko do użytku wewnętrznego”) na getter i setery na świat zewnętrzny byłoby jeszcze gorsze.
Pytanie brzmi: czy powinno
$_fields
być dostępne dla świata zewnętrznego?Jeśli tak, mamy przypadek, w którym dodajesz metody pobierające / ustawiające. Te metody nie zawierają niczego poza faktem, że
$_fields
jest to pewnego rodzaju zmienna (w przeciwieństwie do czegoś obliczonego / pobranego itp. W locie). W zależności od języka prawdopodobnie nadal będziesz wyciekał na zewnątrz (inaczej szczegóły implementacji). Niezależnie od tego, czy zawsze chcesz getterów / seterów, czy tylko wtedy, gdy „potrzebny” jest standardowym problemem kodowania.Jeśli nie
$_fields
powinno być dostępne, to nie korzystaj z niego. To, czy powinieneś uniemożliwić innym dostęp do niego na poziomie językowym (prywatnym i znajomym), czy nie (co może ułatwić debugowanie w pewnych okolicznościach) jest - znowu - standardowym zagadnieniem kodowania.Problem enkapsulacji jest całkowicie ortogonalny. Naruszenie enkapsulacji jest absolutnie możliwe w przypadku osób pobierających i ustawiających. Jeszcze łatwiej jest się w nie wsunąć, ponieważ dzwonki większości ludzi nie dzwonią, gdy widzą grupę pobierających i ustawiających - kod, który pozornie przestrzega najlepszych praktyk. Kod, który bardzo dobrze może wprowadzić znacznie więcej zależności od wewnętrznych szczegółów implementacji niż wywoływana zmienna,
$_fields
która nie jest określona jakoprivate
.Jestem fanem złych analogii: nazywanie tego złym hermetyzacją jest jak nazywanie kogoś, kto trzyma broń, mordercą.
źródło
Nazwałbym takie zmienne zmiennymi publicznymi .
źródło
jeśli twoje metody setter / getter są niczym więcej niż
to po prostu utworzenie zmiennej łonowej pozwala zaoszczędzić trochę pisania poza kilkoma przypadkowymi krawędziami, w których różnica ma znaczenie.
źródło