В вашем решении нет ничего особенно плохого.
Но я бы предпочел, чтобы эти методы не были такими полезными. И просто усложнить интерфейс любого объекта, от которого они отделены.
Код на void moveCameraTo(double latitude, double longitude)самом деле не упрощает код, так как я не вижу проблем, просто вызывая moveCameraTo(new LatLng(latitude, longitude));его. Этот метод также пахнет примитивной одержимостью.
void moveCameraTo(Location location)Может быть лучше решена путем доказательства Location.ToLatLng()метода и вызова moveCameraTo(location.ToLatLng()).
если бы это был C # и если бы такие методы были действительно необходимы, я бы предпочел их в качестве методов расширения, а не методов экземпляра. Использование методов расширения станет действительно очевидным, если вы попробуете абстрагироваться и протестировать этот экземпляр. Поскольку было бы намного проще просто подделать один метод вместо нескольких перегрузок с помощью простых преобразований.
Я думаю, что таким образом я избавляюсь от ответственности знать, например, что такое LatLng в другом классе.
Я не вижу причин, почему это было бы проблемой. Пока ваш код ссылается на класс, который содержит void moveCameraTo(LatLng latLng), он все еще косвенно зависит от LatLng. Даже если этот класс никогда не создается напрямую.
И вам не нужно готовить данные перед вызовом функции.
Я не понимаю, что вы имеете в виду. Если это означает создание нового экземпляра или преобразование классов из одного в другой, я не вижу проблем с этим.
Размышляя об этом, я чувствую, что то, что я говорю, также поддерживается дизайном API самой .NET. Исторически, многие классы .NET следовали вашему подходу, состоящему в том, чтобы иметь много перегрузок с различными параметрами и простых преобразований внутри. Но это было до того, как появились методы расширения. Более современные классы .NET более легки в своих собственных API, и если есть какие-либо методы с перегрузками параметров, они предоставляются как методы расширения. Более старый пример - NLog ILogger, который имеет десятки перегрузок для записи в журнал. Сравните это с более новым Microsoft.Extensions.Logging.ILogger, который имеет в общей сложности 3 метода (и только 1, если вы считаете сам журнал). Но есть много помощников и различных параметризаций в качестве методов расширения .
Я думаю, что этот ответ показывает, что в некоторых языках есть инструменты, чтобы сделать дизайн более приятным. Я не знаю много Java, поэтому я не уверен, будет ли какой-либо эквивалент. Но даже использование простых статических методов может быть вариантом.