Frage

Ich bin ein kleines Stück Code in Python zu schreiben und bin gespannt, was andere Leute davon halten.

Ich habe ein paar Klassen, die jeweils mit einem paar Methoden, und ich versuche, zu bestimmen, was „besser“: Objekte durch Methodenaufrufe passieren, oder Methoden durch Methodenaufrufe zu übergeben, wenn nur eine Methode von einem Objekt benötigt wird. Grundsätzlich sollte ich dies tun:

def do_something(self, x, y, manipulator):
    self.my_value = manipulator.process(x, y)

oder das

def do_the_same_thing_but_differently(self, x, y, manipulation):
    self.my_value = manipulation(x, y)

So wie ich es sehe, ist die zweite wohl „besser“, weil es noch lockerere fördert Kopplung / stärkeren Zusammenhalt zwischen der Manipulation und der anderen Klasse. Ich bin gespannt, einige Argumente für und gegen diesen Ansatz für die Fälle zu sehen, wenn nur eine einzige Methode von einem Objekt benötigt wird.

EDIT: Ich entfernte die OOP Formulierung, weil es klar war bestürzend. Ich war vor allem mit Bezug auf lose Kopplung und hohe Kohäsion.

War es hilfreich?

Lösung

Die zweite Lösung kann loseren Kopplung liefern, weil es mehr „funktional“, nicht mehr „OOP“. Die erste Lösung hat den Vorteil, dass es in Sprachen wie C ++ arbeitet, die keine Verschlüsse (obwohl man einen ähnlichen Effekt kann Vorlagen und Zeiger-to-Mitglied-Funktionen); aber in einer Sprache wie Python, IMHO die zweite Alternative scheint mehr „natürlich“ zu sein.

EDIT: Sie werden eine sehr schöne Diskussion über „functional vs. objektorientierte“ Techniken im freien Buch „Höherwertige Perl“, erhältlich finden Sie hier:

http://hop.perl.plover.com/

(Blick in Kapitel 1, Teil 6). Obwohl es ein Perl (und kein Python) Buch ist, da sich die Diskussion auf die Frage passt genau hier gefragt, und die funktionellen dort beschriebenen Techniken können auf eine ähnliche Art und Weise zu Python angewendet werden.

Andere Tipps

werde ich den zweiten Ansatz sagen; aussehen wird definitiv, weil es wie ein Rückruf , die sie sehr verwendet werden, wenn die Verwendung von Hollywood Prinzip (nicht uns nennen wir rufen Sie zurück), die ein Paradigma ist, dass hilft bei der Entwicklung von Code mit hohen Kohäsion und geringer Kopplung [Ref 2 ].

Ich würde auf jeden Fall mit dem zweiten Ansatz gehen.

Beachten Sie auch, dass Sie die Schnittstelle, gleich welche Manipulators Klasse ändern könnten, so dass process statt __call__ geschrieben wird, und dann wird es funktioniert transparent mit dem zweiten Ansatz.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top