Wenn jemand Code schreibt, damit auf eine interne Variable $ _fields zugegriffen werden kann, ohne Getter / Setter-Methoden zu verwenden, gibt es einen geeigneten Begriff, um dies zu beschreiben?
Etwas Höfliches genug für das Management :)
terminology
scope
PeterB
quelle
quelle
Antworten:
Private Mitglieder zu entlarven ist in einer höflichen Gesellschaft niemals eine gute Sache ...
Diese Praxis ist das Fehlen / schlechte Einkapselung.
quelle
private
) hat noch eine weitere Implementierung des Konzepts der Kapselung.__
ausführt ; sollte dies wirklich für die Namensverfälschung verwenden). Andere Sprachen können ebenfalls eine schlechte Kapselung aufweisen, z. B. Reflexion in Java und Zeigerarithmetik in C ++, um auf private Variablen zuzugreifen. Python macht die Syntax dafür einfach nicht so umständlich.__
Namensmangel. Ohne das__
spiegelt das Design immer noch eine gute Kapselung wider. Die Behauptung, dass "öffentlich" "mangelnde / schlechte Kapselung" bedeutet, ist falsch. Das Konzept ist noch vorhanden. Dem Quellcode fehlt eine angemessene Dekoration.Neben dem von Oded bereits erwähnten Mangel an Kapselung können es sich je nach Programmiersprache und ihren Paradigmen auch um "einfache alte Daten" handeln (bei denen es sich nicht unbedingt um einen Antimuster- oder Codegeruch handelt).
quelle
Ich habe den Begriff "nacktes Objekt" schon einmal gehört.
quelle
Es wird eine Eigenschaftstasche genannt.
Normalerweise wird es verwendet, um eine Reihe von möglicherweise verwandten Eigenschaften zu speichern (wobei jedes möglicherweise ein Klassenobjekt ist, das über geeignete Zugriffsspezifizierer verfügt oder nicht). Aber die umgebende Struktur ist nur eine Tasche von Eigenschaften.
quelle
Es heißt "nicht einem bestimmten Codierungsstandard folgen".
Das OP schrieb:
Das könnte gegen Ihren Standard verstoßen, und (daher) könnte es Code-Geruch sein. Aber es ist nicht unbedingt eine schlechte Verkapselung. Noch schlimmer wäre es, eine interne Variable (wie in "nur für den internen Gebrauch") über Getter und Setter der Außenwelt auszusetzen.
Die Frage ist: sollte
$_fields
für die Außenwelt zugänglich sein?Wenn ja, haben wir einen Fall, in dem Sie Getter / Setter-Methoden hinzufügen würden. Diese Methoden kapseln nichts anderes als die Tatsache, dass
$_fields
es sich um eine Variable handelt (im Gegensatz zu etwas, das im laufenden Betrieb berechnet / abgerufen / usw. Wird). Abhängig von der Sprache wird der Typ (auch als Implementierungsdetail bezeichnet) wahrscheinlich immer noch nach außen übertragen. Ob Sie immer Getter / Setter wollen oder nur, wenn "benötigt", ist ein Standardproblem bei der Codierung.Wenn
$_fields
sollte nicht erreichbar sein, dann, na ja, greift es nicht. Ob Sie andere davon abhalten sollten, auf Sprachebene (privat und mit Freunden) darauf zuzugreifen oder nicht (was unter bestimmten Umständen das Debuggen erleichtern könnte), ist wiederum ein Standardproblem bei der Codierung.Das Problem der Einkapselung ist dazu völlig orthogonal. Eine Verletzung der Kapselung ist mit Gettern und Setzern absolut möglich. Es ist noch einfacher , sich darauf einzulassen, da die Alarmglocken der meisten Menschen nicht läuten, wenn sie eine Reihe von Gettern und Setzern sehen - Code, der anscheinend den Best Practices folgt. Code, der sehr wohl viel mehr Abhängigkeiten von internen Implementierungsdetails mit sich bringt als eine Variable namens
$_fields
, die zufällig nicht als angegeben wirdprivate
.Ich bin ein Fan von schlechten Analogien: Diese schlechte Verkapselung zu nennen, ist wie jemanden, der eine Waffe in der Hand hält, als Mörder zu bezeichnen.
quelle
Ich würde solche Variablen als öffentliche Mitgliedsvariablen bezeichnen .
quelle
wenn Ihre Setter / Getter-Methoden nichts anderes sind als
Wenn Sie dann nur eine öffentliche Variable erstellen, sparen Sie nur einige Eingaben außerhalb einiger Randfälle, in denen der Unterschied von Bedeutung ist.
quelle