In Java mit der folgenden Klasse:
%Vor% Die doWork-Methode muss eine Methode aufrufen, die dependency
verwendet.
Welche der folgenden zwei Varianten gilt als "best practice" und warum?
%Vor%Ich finde, dass ich Letzteres favorisiere und die Abhängigkeit direkt an die Methode übergebe, da es die Methode einfacher macht, isoliert zu testen (wenn auch nur marginal).
Ich bin jedoch an der Java-Konvention / Best Practice hier interessiert.
Eine Klasse existiert, weil Sie Zustände und Operationen haben, die an diesen Zustand gekoppelt sind. Es gibt keinen guten Grund, einen Teil dieses Zustands als Parameter einer Klassenmethode zu übergeben.
Tatsächlich würde es für mich bedeuten, dass dieses Stück Staat eigentlich nicht zur Klasse gehören sollte. Oder dass die Methode nicht zur Klasse gehört.
Die Verwendung eines Parameters "so, dass es einfacher ist, einen Einheitentest durchzuführen" ist ein guter Hinweis darauf, dass letzteres gilt (die Methode sollte nicht in der Klasse sein).
Nun, in Ihrem Beispiel bitten Sie die Funktion, etwas mit Abhängigkeit zu tun, die sich für eine statische Funktion, nicht für eine Member-Funktion eignet.
Meine Faustregel lautet: Verwenden Sie Member direkt beim Aufrufen einer Methode für ein Objekt, dem das Member gehört, übergeben aber Referenzen, wenn Sie etwas direkt mit der Abhängigkeit in Beziehung setzen und testen und statische Methoden für das letztere bevorzugen.
Das ist ein bisschen ausführlich, aber ich hoffe es hilft. Wie immer versuchen Sie, "das Richtige zu tun" und Unterschiede, die so klein sind, werden wahrscheinlich keinen großen Einfluss auf die Wartung oder Lesbarkeit Ihres Codes haben.
Abhängigkeitsinjektion Die zweite Option ist "am besten".
Wenn Sie Ihre "Dependency" -Klasse zu einer Schnittstelle machen, macht sie Code modularer, einfacher zu testen, weniger gekoppelt.
Tags und Links java