Nie ma nic szczególnie złego w twoim rozwiązaniu.
Ale osobiście wolę, aby te metody nie były tak przydatne. I po prostu skomplikuj interfejs dowolnego obiektu, z którego są wyłączone.
To void moveCameraTo(double latitude, double longitude)
tak naprawdę nie upraszcza kodu, ponieważ nie widzę problemu, aby po prostu zadzwonić moveCameraTo(new LatLng(latitude, longitude));
w to miejsce. Ta metoda pachnie także prymitywną obsesją.
void moveCameraTo(Location location)
Mogłoby być lepiej rozwiązane poprzez wykazanie Location.ToLatLng()
sposobu i powołanie moveCameraTo(location.ToLatLng())
.
gdyby to był C # i gdyby takie metody były naprawdę konieczne, wolałbym je jako metody rozszerzenia zamiast metod instancji. Zastosowanie metod rozszerzenia stałoby się naprawdę oczywiste, gdybyś spróbował abstrakcji i przetestował to urządzenie. Ponieważ o wiele łatwiej byłoby po prostu sfałszować jedną metodę zamiast wielu przeciążeń za pomocą prostych konwersji.
Myślę, że w ten sposób eliminuję na przykład odpowiedzialność za znajomość języka LatLng w innej klasie.
Nie widzę powodu, dla którego miałby to stanowić problem. Tak długo, jak twój kod odwołuje się do klasy, która zawiera void moveCameraTo(LatLng latLng)
, nadal zależy pośrednio LatLng
. Nawet jeśli ta klasa nigdy nie jest bezpośrednio tworzona.
I nie trzeba przygotowywać danych przed wywołaniem funkcji.
Nie rozumiem o co ci chodzi. Jeśli oznacza to utworzenie nowej instancji lub przekształcenie klas z jednej w drugą, nie widzę z tym problemu.
Myśląc o tym, czuję, że to, co mówię, jest również wspierane przez projekt API samego .NET. Historycznie wiele klas .NET podążało za twoim podejściem, mając wiele przeciążeń z różnymi parametrami i prostymi konwersjami wewnątrz. Ale to było zanim istniały metody rozszerzenia. Bardziej nowoczesne klasy .NET są bardziej lekkie we własnych interfejsach API, a jeśli istnieją metody z przeciążeniem parametrów, są one dostarczane jako metody rozszerzenia. Starszym przykładem jest NLog ILogger, który ma dziesiątki przeciążeń związanych z pisaniem do dziennika. Porównaj to z nowszym Microsoft.Extensions.Logging.ILogger, który ma w sumie 3 metody (i tylko 1, jeśli policzysz rejestrowanie). Ale istnieje wiele pomocników i różnych parametryzacji jako metod rozszerzenia .
Myślę, że ta odpowiedź pokazuje, że niektóre języki miałyby narzędzia, dzięki którym projektowanie takie byłoby ładniejsze. Nie znam dużo Javy, więc nie jestem pewien, czy będzie jakiś odpowiednik. Ale nawet przy użyciu zwykłych metod statycznych może być opcją.