An Ihrer Lösung ist nichts besonders auszusetzen.
Aber meine persönliche Präferenz wäre, dass diese Methoden nicht so nützlich sind. Und komplizieren Sie einfach die Schnittstelle des Objekts, von dem sie getrennt sind.
Das void moveCameraTo(double latitude, double longitude)
vereinfacht den Code nicht wirklich, da ich kein Problem sehe, einfach moveCameraTo(new LatLng(latitude, longitude));
an seiner Stelle anzurufen. Diese Methode riecht auch nach primitiver Besessenheit.
Das void moveCameraTo(Location location)
könnte besser gelöst werden, indem Location.ToLatLng()
Methode und Aufruf bewiesen werden moveCameraTo(location.ToLatLng())
.
Wenn dies C # wäre und solche Methoden wirklich notwendig wären, würde ich sie als Erweiterungsmethoden anstelle von Instanzmethoden bevorzugen. Die Verwendung von Erweiterungsmethoden wird sehr offensichtlich, wenn Sie versuchen, diese Instanz zu abstrahieren und einem Unit-Test zu unterziehen. Da es viel einfacher wäre, nur eine einzelne Methode zu fälschen, anstatt mehrere Überladungen mit einfachen Konvertierungen.
Ich denke, dass ich auf diese Weise die Verantwortung eliminiere, zum Beispiel zu wissen, was ein LatLng in einer anderen Klasse ist.
Ich sehe keinen Grund, warum dies ein Problem sein würde. Solange Ihr Code auf eine Klasse verweist, die diese enthält void moveCameraTo(LatLng latLng)
, hängt dies indirekt davon ab LatLng
. Auch wenn diese Klasse niemals direkt instanziiert wird.
Und Sie müssen die Daten nicht vorbereiten, bevor Sie die Funktion aufrufen.
Ich verstehe nicht, was du meinst. Wenn es bedeutet, eine neue Instanz zu erstellen oder Klassen von einer in eine andere umzuwandeln, sehe ich kein Problem damit.
Wenn ich darüber nachdenke, habe ich das Gefühl, dass das, was ich sage, auch vom API-Design von .NET selbst unterstützt wird. In der Vergangenheit folgten viele .NET-Klassen Ihrem Ansatz, viele Überladungen mit unterschiedlichen Parametern und einfache Konvertierungen im Inneren zu haben. Aber das war, bevor es Erweiterungsmethoden gab. Moderne .NET-Klassen sind in ihren eigenen APIs leichter und wenn es Methoden mit Parameterüberladungen gibt, werden sie als Erweiterungsmethoden bereitgestellt. Älteres Beispiel ist NLog ILogger mit Dutzenden von Überladungen zum Schreiben in das Protokoll. Vergleichen Sie dies mit dem neueren Microsoft.Extensions.Logging.ILogger mit insgesamt 3 Methoden (und nur 1, wenn Sie die Protokollierung selbst zählen). Es gibt jedoch viele Helfer und verschiedene Parametrisierungen als Erweiterungsmethoden .
Ich denke, diese Antwort zeigt, dass einige Sprachen Werkzeuge haben würden, um Design wie dieses schöner zu machen. Ich kenne nicht viel Java, daher bin ich mir nicht sicher, ob es ein Äquivalent geben würde. Aber auch die Verwendung einfacher statischer Methoden könnte eine Option sein.