In dieser Frage zu SO geht es darum, zu korrigieren, was der OP-Gedanke für Feature-Neid- Code ist. Ein weiteres Beispiel, in dem ich gesehen habe, wie dieser flotte Satz zitiert wurde, ist eine kürzlich von Programmierern hier gegebene Antwort . Obwohl ich in einem Kommentar zu dieser Antwort nach Informationen gefragt habe, dachte ich, dass es für Programmierer, die Fragen und Antworten befolgen, eine allgemeine Hilfe wäre, zu verstehen, was unter dem Begriff Feature-Neid zu verstehen ist . Gerne können Sie weitere Tags bearbeiten, wenn Sie dies für angemessen halten.
refactoring
code-reviews
clean-code
code-smell
Aussenseiter
quelle
quelle
Antworten:
Feature-Neid ist ein Begriff, der verwendet wird, um eine Situation zu beschreiben, in der ein Objekt auf die Felder eines anderen Objekts gelangt, um eine Art Berechnung durchzuführen oder eine Entscheidung zu treffen, anstatt das Objekt aufzufordern, die Berechnung selbst durchzuführen.
Betrachten Sie als einfaches Beispiel eine Klasse, die ein Rechteck darstellt. Der Benutzer des Rechtecks muss möglicherweise seinen Bereich kennen. Der Programmierer könnte belichten
width
undheight
Felder und dann die Berechnung außerhalb derRectangle
Klasse durchführen. AlternativRectangle
könnte die haltenwidth
undheight
Felder privaten und bietengetArea
Methode. Dies ist wohl ein besserer Ansatz.Das Problem mit der ersten Situation und der Grund, warum sie als Codegeruch betrachtet wird, ist, dass sie die Kapselung unterbricht.
Als Faustregel gilt, wenn Sie feststellen, dass Sie Felder einer anderen Klasse ausgiebig verwenden, um irgendeine Art von Logik oder Berechnung durchzuführen, ziehen Sie in Betracht, diese Logik auf eine Methode in der Klasse selbst zu verschieben.
quelle
Es gibt eine mögliche Situation, in der es in Ordnung ist, andere Klassen- / Strukturmethoden ausgiebig zu verwenden - wenn Ihre Klasse / Struktur ein Container für Daten ist. In der Regel gibt es ein wenig, was Sie mit diesen Daten ohne externen Kontext tun können.
Solche Klassen können immer noch interne Logik enthalten, werden jedoch häufiger als Container verwendet:
@jhewlett bezieht sich in seiner Antwort auf diesen Artikel, um zu beweisen, dass Sie keine anderen Klassenmitglieder ausgiebig verwenden sollten, aber es gibt eine andere Code-Geruchssituation , die dort mit Befürwortern meines Beispiels beschrieben wird:
quelle