В вашем решении нет ничего особенно плохого.
Но я бы предпочел, чтобы эти методы не были такими полезными. И просто усложнить интерфейс любого объекта, от которого они отделены.
Код на 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, поэтому я не уверен, будет ли какой-либо эквивалент. Но даже использование простых статических методов может быть вариантом.