
Sergey
09.12.2016
13:11:21
потому что в этом суть ООП
данные и логика по обработке этих данных должны лежать вместе
инкапсуляция и все такое

Evgeniy
09.12.2016
13:11:47
у тебя там только один объект GeoCordinat ?

Google

Evgeniy
09.12.2016
13:11:58
больше никаких объектов ?)
делаем GodObject ?

Sergey
09.12.2016
13:12:10
у каждого объекта своя зона ответстветнности и свое поведение

Evgeniy
09.12.2016
13:12:26
у гео кординаты очевидно это координаты

Sergey
09.12.2016
13:12:29
оценка расстояния между двумя координатами - задача самих координат

Evgeniy
09.12.2016
13:12:33
ну и возможно название места

Sergey
09.12.2016
13:12:35
точно так же как деньги могут сравнивать друг дружку
короч, у тебя процедурныйы взгляд на вещи. Данные и процедуры

Evgeniy
09.12.2016
13:12:54
ну ок, это дело вкуса
но я бы делал не так

Sergey
09.12.2016
13:13:02
это не дело вкуса. это принципиальна вещи
инкапсуляция
закон деметры

Google

Sergey
09.12.2016
13:13:18

Evgeniy
09.12.2016
13:13:34
новую кординату создай
вот тебе и сдвиг

Sergey
09.12.2016
13:13:42
кто его будет создавать?

Evgeniy
09.12.2016
13:13:43
и используй ее

Sergey
09.12.2016
13:13:43
это детали

Sergey
09.12.2016
13:13:47
кто тебе будет сдвигать?

Sergey
09.12.2016
13:13:48
а где она будет создаваться?
то что иммутабельность и вся хуйня это и так понятно
где эта логика должна быть?
отдельные функции в неймспейсе? статические методы? отдельный сервис?

Evgeniy
09.12.2016
13:14:18
а где ты ее двигаешь
для чего ?
на карте ?
новая отметка ?

Sergey
09.12.2016
13:14:49
class Point
{
public function moveRelativly(Point $point);
}

Sergey
09.12.2016
13:14:50
какая разница?) алгоритм просчета дистанции не такой уж и простой
чтобы его везде копипастить

Evgeniy
09.12.2016
13:15:08
ну так вынеси его из объекта тем более
пусть он отвечает за хранение кординат

Google

Sergey
09.12.2016
13:15:32
$theta = $lng1 - $lng2;
$dist = sin(deg2rad($lat1))
* sin(deg2rad($lat2))
+ cos(deg2rad($lat1))
* cos(deg2rad($lat2))
* cos(deg2rad($theta));
$dist = acos($dist);
$dist = rad2deg($dist);
return round($dist * 60 * 1.1515);
вот чтобы быть точнее
куда вынести?

Evgeniy
09.12.2016
13:16:03
ну я бы делал ServiceGeoCordinat

Sergey
09.12.2016
13:16:03
короч ты только что сломал инкапсуляцию(

Evgeniy
09.12.2016
13:16:32
и для определения дистанций метод distance(GeoCordinat $a, GeoCordinat $b);

Sergey
09.12.2016
13:17:18
как этот метод получит данные находящиеся внутри $a и $b?
гетеры?
публичные свойства?

Evgeniy
09.12.2016
13:17:33
да
геттеры очень даже ничего

Sergey
09.12.2016
13:17:49
поздравляю, ты только что нарушил закон деметры
https://ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%BA%D0%BE%D0%BD_%D0%94%D0%B5%D0%BC%D0%B5%D1%82%D1%80%D1%8B

Sergey
09.12.2016
13:18:06

Sergey
09.12.2016
13:18:18
если у тебя есть геттеры, которые нужны ТОЛЬКО для одной фигни, значит эту фигню надо вносить в объект

Evgeniy
09.12.2016
13:18:18
так там МОДУЛИ
а тут классы
эти классы в одном модуле

Sergey
09.12.2016
13:18:29
вот елси у тебя 10 операций - то тогда значит данные лежат немного не там где надо)

Google

Sergey
09.12.2016
13:18:44
геттеры в целом свидетельствуют о низкой внутренней связанности системы (coheasion)
полностью от них отказаться никак не выйдет, но лепить их просто так - это не ООП

Evgeniy
09.12.2016
13:19:12
хорошо вот тебе вопрос
твои кординаты должны взаимодействовать с дорой
тот же 2 гис например
и тебе надо просчитывать кратчайший маршрут
на основе карт

Sergey
09.12.2016
13:19:45
нет, мои координаты не должны с ними взаимодействовать

Evgeniy
09.12.2016
13:19:49
это графы и поиск кратчайшего пути

Sergey
09.12.2016
13:20:03
нам нужна дистанция между 2 точками
не кратчайшие пути

Evgeniy
09.12.2016
13:20:19
ок у тебя спека и ты прав
ты работаешь по тз и ничего никогда не меняется

Sergey
09.12.2016
13:20:30
что бы найти кратчейший путь тебе нужна карта

Evgeniy
09.12.2016
13:20:32
все стабильно

Sergey
09.12.2016
13:20:34
вот карта и найдет тебе все
$map->shortestWay($pointA, $pointB);

Sergey
09.12.2016
13:21:21
давай вместо координат на карте возьмем координаты на 2х мерном пространстве
или вообще вектора
там тебе 2гис точно не нужен)

Google

Evgeniy
09.12.2016
13:21:42
ок ваше дело я не настайваю я просто говорю как бы я делал

Sergey
09.12.2016
13:21:42
с 2gis интереснее на самом деле)

Evgeniy
09.12.2016
13:21:48
хотите так делать либу делайте
просто на результаты вычисления могут влиять параметры самого объекта

Sergey
09.12.2016
13:22:22
не, мы пытаемся тебе объяснит смысл инкапсуляции, связанности и в целом чем ооп отличается от чисто процедурного программирования

Evgeniy
09.12.2016
13:22:32
я предпочитаю чтобы параметры для расчетов передавались явно
это лишь имхо

Sergey
09.12.2016
13:22:52

Evgeniy
09.12.2016
13:23:04
ок я делаю процедурный код
еще какие выводы?

Sergey
09.12.2016
13:23:20
процедурный код = сложность

Evgeniy
09.12.2016
13:23:24
да

Sergey
09.12.2016
13:23:26
сложность = дорого поддерживать

Evgeniy
09.12.2016
13:23:32
писать ооп как говорите вы?

Sergey
09.12.2016
13:23:37
ну тип того
или функциональщина
там тоже самое но прикольнее

Evgeniy
09.12.2016
13:23:53
вот уже разбежался прямо переписывать

Sergey
09.12.2016
13:23:59
и чуть ближе к тому что тебе нравится

Sergey
09.12.2016
13:23:59
ОК для именованного конструктора берем не VO, а сущность, у которой есть свои хотелки и поведение
и потом делаем User::createFromEmail($email)
у сущностей же может быть логика верно?)

Evgeniy
09.12.2016
13:24:12
вывод на самом деле прост, то что ваши взгляды отличны от моих