@oop_ru

Страница 24 из 785
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
зачем в простом объекте по хранению координат держать логику
где должна быть логика например по "сдвинуть координату влево на 10 пунктов" или "дистанция до координаты Б" или же "координата, между текущей точкой и точкой Б" ?

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
ну так вынеси его из объекта тем более
1. Куда? В PointDistanceCalculator? 2. Теперь придется открыть доступ к внутреннему состоянию Point

короч ты только что сломал инкапсуляцию(

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
вывод на самом деле прост, то что ваши взгляды отличны от моих

Страница 24 из 785