@symfony_php

Страница 754 из 1418
Sergey
18.03.2018
17:11:18
> Естественно, это удобнее всего спрятать за сеттером расписания. а я просто возвращаю итератор)

$slots = $schedule->availableSlots() foreach ($slots as $slot) { // делаем дела }

Konstantin
18.03.2018
17:13:20
без гет как то нипанятна

Google
Greabock
18.03.2018
17:13:22
Ага, удачи тебе форычем по битовой маске гулять )

Sergey
18.03.2018
17:13:52
Sergey
18.03.2018
17:14:10
может быть вся проблема в том как именно ты организовал рассписание?)

если что - у меня под рукой (в моем проекте) есть некие "штуки" у которых есть рассписание работы, и я в них "скеджелю" какие-то вещи

Vladislav
18.03.2018
17:15:17
ну я бы засунул штуку с битовой маской куда-то в сервис какой-то

но не в сущность

в сеттер

Sergey
18.03.2018
17:15:21
и у меня нет "бинарных масок"

Vladislav
18.03.2018
17:15:36
ну вот для расписания они хороши) все осхраняешь в одном поле.

Google
Sergey
18.03.2018
17:17:07
$slots = $schedule->availableSlots() foreach ($slots as $slot) { // делаем дела }
в моем примере schedule это уже готовое рассписание работы, которое в твоем случае видимо включает какую-то битовую маску или чего еще. Это может быть просто коллекция. availableStlots - в моем случае мне надо получить информацию когда можно забронировать

и у меня нет никаких сеттеров и прочей чуши для этого. Поменялось рассписание - новый инстанс Schedule

p.s. пока ты подтверждаешь смешание понятия "сеттер" и "просто метод" + подтверждаешь цитатами про graphql влияние UI на то как ты производишь декомпозицию))

Konstantin
18.03.2018
17:19:09
блин почему я тут вижу лишь бунт против конвенции

что со мной не так

Sergey
18.03.2018
17:19:24
блин почему я тут вижу лишь бунт против конвенции
конвенции "есть данные и есть процедуры"?

Konstantin
18.03.2018
17:19:39
конвенция гет получает данные объекта, сет устанавливает

дальше знать не обязательно че и как там внутри - берется из поля или вычисляется

f4rt~
18.03.2018
17:19:53
блин почему я тут вижу лишь бунт против конвенции
я наоборот понял, что за идеей скрывается нечто меньшее, нежели я предполагал

Konstantin
18.03.2018
17:20:16
хм )

Sergey
18.03.2018
17:20:26
не могу сказать что это что-то "меньшее"

Alan
18.03.2018
17:20:35
можт лучше не сеттерыгеттеры обсуждать тогда а анемичные и рич модели ?)

а то все на нейминг сводится

Konstantin
18.03.2018
17:20:55
нэйминг это вторая сложная проблема программирования

почему бы не уделить ей достаточно времени )

Sergey
18.03.2018
17:21:04
а еще можно только с позиции связанности кода обсуждать какахи

f4rt~
18.03.2018
17:21:11
не могу сказать что это что-то "меньшее"
ну то, что вы называете повидением модели, что делает из анемичной нормальную модель, судя по треду оказалось немного не то, что я предполагал

Google
Alan
18.03.2018
17:21:41
ну если говорить за анемию и рич модели то теперь можно дать ссылку на доку доктрины где рекомендуют))

про связанность надо гуглить идти

Sergey
18.03.2018
17:22:00
есть объект, у него внутри какие-то данные, и этот объект предоставляет тебе какие-то методы что бы объект мог с этими данными что-то сделать. Важный момент - ты данные напрямую не трогаешь.

если у тебя внутри объекта данные, и методы трогают не все эти данные а каждый метод трогает только какую-то часть данных, причем ты явно можешь разделить на группы - имеет смысл разделить сам объект на отдельный объекты что бы данные которые нужны месте были вместе

дальше идут более сложные кейсы когда у тебя например есть 3 поля, и 2 метода, и каждому из этих методов нужны 2 поля, то есть есть неполное пересечение

и тут уже надо разбираться почему так вышло, можно ли от этого уйти....

если нельзя то что делать...

это все про инкапсуляцию (проведение границ по сути, границы "капсул"), декомпозицию, абстракцию и т.д.

Konstantin
18.03.2018
17:25:03
слушай у меня есть дурацкий вопрос. смотри какое дело. есть User; private $firstName; private $lastName; метод setFullName($fullName){ $e = explode(" ", $fullName, 2); $this->firstName = $e[0]; $this->lastName=$e[1]; } будет считаться сеттером?

или есть более удачное название для установки имени к юзеру

f4rt~
18.03.2018
17:25:33
какая-то глупость

Konstantin
18.03.2018
17:26:01
какая-то глупость
дурацкий вопрос

Sergey
18.03.2018
17:26:21
я бы сделал так: class Name { private $first; private $last; private function __construct(string $firstName, string $lastName) { $this->first = $firstName; $this->last = $lastName; } public static function fromString(strign $fullName) { $parts = explode(" ", $fullName, 2); return new self($parts[0], $parts[1]); } }

и делай себе

$user->setName(Name::fromString('Alan Kay'));

Konstantin
18.03.2018
17:27:24
и че потом опять его делать persist ?

Sergey
18.03.2018
17:27:35
и че потом опять его делать persist ?
почитай про embeddable, это не сущность

и че потом опять его делать persist ?
ну и паралельно почитай про каскадный персист

Konstantin
18.03.2018
17:28:25
т.е. мне прям необходимо завести отдельный объект для этого

и все усложнить на пустом месте? )

Google
Alan
18.03.2018
17:28:50
сервис заведи и менеджер )))

Greabock
18.03.2018
17:28:57
ui никак не влияет. Это просто подход. Я не ввожу "какие-то-там-данные". Я получаю с бэка модели, модифицирую их на фронте, отправляю их назад в том же виде, в каком получил. Это очень ускоряет разработку. Вот и всё. Если что-то добавилось, какие-то события возникли или, что-то еще случилось, всё это обрабатывается в сеттерах. Вся логика сводится к $hydrator->hydrate(Model::class, $data); $em->flush();В гидраторе уже есть резолверы, которые могут вытащить модели из базы или создать новые модели, в зависимости от того, представлен ли идентификатор(ы). Валидация примитивов происходит на уровне graphql. Сложные проверки - в сеттерах. Может не очень хорошее для них название. Но они такие, да.

Sergey
18.03.2018
17:29:22
и все усложнить на пустом месте? )
а где усложнение? маленький простой изолированный объект, его можно потестить отдельно (потому что в реальности у тебя не так все просто может быть))

Konstantin
18.03.2018
17:29:42
для одного метода нужен один дополнительный объект

f4rt~
18.03.2018
17:29:54
Konstantin
18.03.2018
17:29:59
и для 10 разных энтити с 5 методами надо хм 50 промежуточных объектов

Alan
18.03.2018
17:30:34
зачем классы, 10 разных процедур!)

Sergey
18.03.2018
17:30:45
и для 10 разных энтити с 5 методами надо хм 50 промежуточных объектов
или 20 сервисов менеджеров которые невозможно покрыть юнитами, да)

Admin
ERROR: S client not available

Konstantin
18.03.2018
17:30:57
это уже ооп ради ооп приправленое сверху иммутабельным соусом

Sergey
18.03.2018
17:31:03
ты пробовал?

вот честно, ты просто отвергаешь, это не критический взгляд на вещи

ты пытаешься доказать свою точку зрения

не пытаясь даже ее проверить

это не "силвер булет"

Konstantin
18.03.2018
17:31:48
пытаюсь выяснить зачем делать больше работы если можно делать меньше работы

я ленивый

Google
f4rt~
18.03.2018
17:32:04
Sergey
18.03.2018
17:32:05
пытаюсь выяснить зачем делать больше работы если можно делать меньше работы
что если я тебе скажу что работы по факту будет меньше?)

(но думать придется больше конечно, а думать больно да)))

Konstantin
18.03.2018
17:32:40
работы печатания или работы какой? придумать, назвать, найти место куда это все положить.

Alan
18.03.2018
17:32:47
меньше работы это когда меньше букв?) или реже ломается, или легче тестируется?

Konstantin
18.03.2018
17:32:51
приходит другой человек на проект и начинает изучать все 100500 промежуточных классов )

f4rt~
18.03.2018
17:32:53
и ты можешь делать вещи просто, в том случае если их нужно сделать на раз и забыть, но по итогу если тебя попросят поддерживать твое решение дальше, ты будешь делать больше работы по итогу

Sergey
18.03.2018
17:33:13
работы печатания или работы какой? придумать, назвать, найти место куда это все положить.
я еще раз повторюсь - попробуй, сделай себе домашний проект и попробуй реализовать)

только не CRUD

Alan
18.03.2018
17:33:20
приходит другой человек на проект и начинает изучать все 100500 промежуточных классов )
прям такой увидел класс Name и пошел у фаулера читать что это такое)

Konstantin
18.03.2018
17:33:37
не, прям зашел в папку а там 50 мелких классов по 2 параметра

Sergey
18.03.2018
17:33:44
приходит другой человек на проект и начинает изучать все 100500 промежуточных классов )
и ты не представляешь насколько такой подход упрощает введение в проект

f4rt~
18.03.2018
17:33:50
сложно понять, да

Sergey
18.03.2018
17:34:06
не, прям зашел в папку а там 50 мелких классов по 2 параметра
если у тебя одна папка и все эти "промежуточные классы" лежат там - то у тебя херовая декомпозиция на модули)

не, прям зашел в папку а там 50 мелких классов по 2 параметра
почитай про high cohesion и low coupling для начала

Konstantin
18.03.2018
17:34:27
ну, я понял вашу позицию

Sergey
18.03.2018
17:34:30
и попробуй спроецировать прочитанное на свой опыт

Konstantin
18.03.2018
17:34:32
к сведению принял )

Sergey
18.03.2018
17:34:40
ну, я понял вашу позицию
сомневаюсь что понял

Alan
18.03.2018
17:34:46
не, прям зашел в папку а там 50 мелких классов по 2 параметра
ну скажем в каждом таком классе точно не одно свойство да? у тебя такие сущности что наберется 50 классов? тогда представь что без них будет с твоими менеджерами и сеттерами в энтити

Konstantin
18.03.2018
17:34:49
не сомневайся. нельзя сомневаться )

Sergey
18.03.2018
17:35:03
не сомневайся. нельзя сомневаться )
еще раз показывает отсутствие критического взгляда на вещи

Страница 754 из 1418