Non c'è nulla di particolarmente sbagliato nella tua soluzione.
Ma la mia preferenza personale sarebbe che quei metodi non fossero così utili. E complica semplicemente l'interfaccia di qualunque oggetto a cui appartengono.
Questo void moveCameraTo(double latitude, double longitude)
non semplifica davvero il codice, poiché non vedo alcun problema semplicemente chiamando moveCameraTo(new LatLng(latitude, longitude));
al suo posto. Questo metodo profuma anche di ossessione primitiva.
La soluzione void moveCameraTo(Location location)
potrebbe essere risolta meglio dimostrando il Location.ToLatLng()
metodo e chiamando moveCameraTo(location.ToLatLng())
.
se questo fosse C # e se tali metodi fossero veramente necessari, li preferirei come metodi di estensione anziché metodi di istanza. L'uso dei metodi di estensione diventerebbe davvero ovvio se si provasse in astratto e si testasse l'unità di questa istanza. Poiché sarebbe molto più semplice falsificare un singolo metodo anziché più sovraccarichi con conversioni semplici.
Penso che in questo modo elimini la responsabilità di sapere cosa è un LatLng in un'altra classe, per esempio.
Non vedo alcun motivo per cui questo sarebbe un problema. Finché il codice fa riferimento alla classe che contiene void moveCameraTo(LatLng latLng)
, dipende comunque indirettamente LatLng
. Anche se quella classe non viene mai istanziata direttamente.
E non è necessario preparare i dati prima di chiamare la funzione.
Non capisco cosa intendi. Se significa creare una nuova istanza o trasformare le classi da una all'altra, non vedo alcun problema.
Pensandoci, ritengo che ciò che sto dicendo sia supportato anche dalla progettazione API di .NET stesso. Storicamente, molte classi .NET hanno seguito il tuo approccio di avere molti sovraccarichi con parametri diversi e conversioni semplici all'interno. Ma era prima che esistessero i metodi di estensione. Le classi .NET più moderne sono più leggere nelle proprie API e se esistono metodi con sovraccarichi di parametri, vengono fornite come metodi di estensione. Il vecchio esempio è NLog ILogger che ha dozzine di sovraccarichi per la scrittura nel registro. Confrontalo con il più recente Microsoft.Extensions.Logging.ILogger che ha un totale di 3 metodi (e solo 1 se conti la registrazione stessa). Ma ci sono molti helper e varie parametrizzazioni come metodi di estensione .
Penso che questa risposta mostri che alcune lingue avrebbero strumenti per rendere il design così bello. Non conosco molto Java, quindi non sono sicuro che ci sarebbe un equivalente. Ma anche l'utilizzo di semplici metodi statici potrebbe essere un'opzione.