У вашому рішенні немає нічого особливо поганого.
Але мої особисті переваги полягають у тому, що ці методи не такі корисні. І просто ускладніть інтерфейс будь-якого об'єкта, який вони відривають.
Код 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, тому не впевнений, чи був би еквівалент. Але навіть використання простих статичних методів може бути варіантом.