
Sergey
09.05.2018
12:03:43
Почему?
ну окей окей, если тебя устраивает что и для чтения и для записи используется одна и та же модель - можно назвать это es и что там нет cqrs)
либо у тебя внутри модели на запись просто будут добавляться проекции чисто для чтения

Aleh
09.05.2018
12:04:22
Да и смысл то вполне очевидный - мы уже храним ивенты и в будущем можем и проекции начать строить и данные не теряем для них

Sergey
09.05.2018
12:04:30
а тут и нарушение SRP и куча других проблем

Google

Sergey
09.05.2018
12:04:44
но в целом законом не запрещено

Aleh
09.05.2018
12:05:00

Sergey
09.05.2018
12:05:22
SRP надуманный принцип? расплычатый - да, но не надуманный)

Maksim
09.05.2018
12:05:36
Привет, подскажите пожалуйста, а как по уму пробрассывать валидированные входные данные из контроллера в сервис? Десятком параметров? Массивом? DTO?
И что должен возвращать контроллер в случае ошибки, не HttpException же?

Aleh
09.05.2018
12:06:02
Ну т.е. будет у тебя поток изменений на вьюхи сильно отличаться от потока изменений на модель - разделишь

Sergey
09.05.2018
12:06:14

Maksim
09.05.2018
12:06:57

Aleh
09.05.2018
12:07:18

Sergey
09.05.2018
12:07:57
ну это если ты не бложик делаешь конечно

Maksim
09.05.2018
12:08:30
А по поводу передачи, куча параметров не вариант даже визуально - каша, массивы - зло, DTO хороший вариант вроде...

Sergey
09.05.2018
12:09:14

Google

Adel
09.05.2018
12:09:35

Maksim
09.05.2018
12:09:49

Adel
09.05.2018
12:09:54
ага.
но вон Фесор вроде и для симфоньки подобное сделал

Maksim
09.05.2018
12:11:02
ага.
Я Lumen использую. Надо будет подумать, чтобы перетащить...

Adel
09.05.2018
12:12:04
UserCreateRequest

Sergey
09.05.2018
12:12:15
то что сделал я лучше не юзать, я тогда был маленький и глупый

Adel
09.05.2018
12:12:31
HttpUserCreateRequest extends FormRequest implements UserCreateRequest

Sergey
09.05.2018
12:12:54

Maksim
09.05.2018
12:13:17

Adel
09.05.2018
12:13:35
ну интерфейс принадлежит application layer. а FormRequest - http слою.
и я вот так прмиерно решил для себя их разделять.
т.е. это не DTO. а интерфейс с геттерами.
вроде как бы DTO. но не совсем.

Sergey
09.05.2018
12:17:13
хз, если бы были типы я бы массивчики юзал и не парился
@psalm-typedef array{
id: int
name: string
age: int
}
что-нибудь такое

Adel
09.05.2018
12:18:07
тут как будто struct а не массив

Google

Sergey
09.05.2018
12:18:44

Adel
09.05.2018
12:20:09
ну блин :) массив это просто список чегото. там либо безтиповой либо все значения одного типа. "массив" в котором три поля разного типа.. это какаято ересь и вообще не по единому языку, который юзают девелоперы :)

Dmitry
09.05.2018
12:21:48

Sergey
09.05.2018
12:22:23
короч гугли про "php array shapes"

Dmitry
09.05.2018
12:25:08
что то по такому запросу ничего не нашлось :( Просто не понятно для чего юзать такие конструкции когда есть объекты

Adel
09.05.2018
12:25:46

Sergey
09.05.2018
12:26:13
это самое сильное что есть в php, и без этого php в целом вообще нет смысла рассматривать для разработки. И при этом никто не хочет их юзать... хм... почему? потому что нет возможности статического анализа такой вот херни. Потому все радостно херачат классы (которые тоже не дают всей информации о типах)))) и потом еще мэпперы пишут
но возможность анализа есть - typescript nому доказательство.
просто из анализаторов толковых - вот только недавно psalm появился

Dmitry
09.05.2018
12:30:04
по описанию как то сложнее получается

Evgenii
09.05.2018
12:30:50
А почему не сделать дто с публичными свойствами? зачем ему вообще геттеры и сеттеры?(без сарказма) - я имею ввиду то, что понятие контракта в пхп сводится просто к использованию интерфейса- в таком случае - если у меня дто не имплементирует интерфейс( и в теории не должен), тогда я просто юзаю паблик филды и не парюсь, так ведь?

Adel
09.05.2018
12:30:51
я если честно тоже не понимаю. чушь какаято :) видмо хотят как в сишарпе свойство инициализировать в DTO.

Sergey
09.05.2018
12:31:46

Adel
09.05.2018
12:32:16

Dmitry
09.05.2018
12:32:18
+ поведение можно задать

Google

Evgenii
09.05.2018
12:35:04
так никто и не мешает
вот именно, но все упорно лепят интерфейсы в дто и фигачят геттеры/сеттеры- вопрос, в чем профит?

Dmitry
09.05.2018
12:35:26

Sergey
09.05.2018
12:35:34

Evgenii
09.05.2018
12:35:42

Sergey
09.05.2018
12:36:02
ну и опять же - я за структурный тайпинг в этих вопросах а не за классы
нужна структура данных - делай структуру данных

Dmitry
09.05.2018
12:36:50
я в общем
в общем - я не знаю зачем там интерфейс :) dto сам себе интерфейс )))

Sergey
09.05.2018
12:37:22

Evgenii
09.05.2018
12:37:39
?

Dmitry
09.05.2018
12:39:34
в данном контексте - это значит что объект содержит консистентные данные

Evgenii
09.05.2018
12:43:49
интерфейс - некоторое правило взаимодействия, в ооп - характеризует некое поведение, тогда какого хрена оно вообще персекается в одном предложении с дто, у дто есть поведение?

Dmitry
09.05.2018
12:44:37
$dto->getName(); - это не поведение?

Adel
09.05.2018
12:48:33

Sergey
09.05.2018
12:48:48
особенно если потом ты запихнешь это дело в условие какое

Dmitry
09.05.2018
12:49:02
для DTO ?

Sergey
09.05.2018
12:50:29
для DTO ?
в DTO нет поведения. никакого. достать поле это не поведение
с тем же успехом можно делать просто поля, но тут начинают ныть "но тогда не имутабельно" и начинается херня с геттерами в связи с отсутствием final в php

Dmitry
09.05.2018
12:50:53

Google

Sergey
09.05.2018
12:51:07

Dmitry
09.05.2018
12:51:09
$dto->name - это не поведение, хотя ...

Sergey
09.05.2018
12:51:22
и если это не DTO и там есть getName то 90% что я буду злиться
после того как пройдусь по findUsage

Adel
09.05.2018
12:56:04
а вот кто DTO делает. вы их как называете? UserCreateDTO есть такой суффикс? я в паре проектов видел.. и мне чтото не нравится

Артур Евгеньевич
09.05.2018
12:56:48
я не делаю

Like
09.05.2018
12:56:52

Артур Евгеньевич
09.05.2018
12:56:59
тем более когда их много они в папке DTO могут лежать

Adel
09.05.2018
12:57:01
а как называешь?

Dmitry
09.05.2018
13:00:39

Like
09.05.2018
13:01:26

Sergey
09.05.2018
13:04:59
вообще обычно dto одна на точку использования, это то что меня напрягает в этом деле. А если у тебя не одна dto на точку формирования вьюхи - что-то не так с модульностью view layer)

Dmitry
09.05.2018
13:14:51

Sergey
09.05.2018
13:15:25

Dmitry
09.05.2018
13:16:29
сохранить место на экране при вызове метода или конструктора, только для этого

Sergey
09.05.2018
13:23:41

Dmitriy
09.05.2018
13:27:43
они и в C и в C++ есть. Более того, классы по сути и есть struct

Adel
09.05.2018
13:28:11
кстати я забыл уже чем в шарпе стракты от класов отличаются.