@oop_ru

Страница 638 из 785
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
а тут и нарушение SRP и куча других проблем
Нарушение надуманных принципов не проблема сама по себе, ну)

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

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

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

Maksim
09.05.2018
12:06:57
как тебе удобно (в долгосрочной перспективе), так и делай.
Ну я считаю что неверно из сервиса кидать HTTP исключение, а свои городить под каждый случай чет хз...

Sergey
09.05.2018
12:07:57
Ну я считаю что неверно из сервиса кидать HTTP исключение, а свои городить под каждый случай чет хз...
я считаю что важно знать какие у тебя ошибки происходят в приложении а не смотреть на логи с обобщенными штуками

ну это если ты не бложик делаешь конечно

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

Sergey
09.05.2018
12:09:14
А по поводу передачи, куча параметров не вариант даже визуально - каша, массивы - зло, DTO хороший вариант вроде...
массивы не зло (я так понимаю php), просто нет возможности удобно с типами работать. Что до DTO - если тебе нравится - юзай че

Google
Adel
09.05.2018
12:09:35
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
но вон Фесор вроде и для симфоньки подобное сделал
для симфони у тебя есть argument resolver и validator

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

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

Sergey
09.05.2018
12:12:54
HttpUserCreateRequest extends FormRequest implements UserCreateRequest
зачем DTO-хе имплементить интерфейс?

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
тут как будто struct а не массив
какая разница?) у тебя в php массивы тоже не совсем массивы

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

Dmitry
09.05.2018
12:21:48
@psalm-typedef array{ id: int name: string age: int }
ну это ты просто описал коллекцию объектов одного типа )))

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

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

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

но возможность анализа есть - typescript nому доказательство.

просто из анализаторов толковых - вот только недавно psalm появился

Dmitry
09.05.2018
12:30:04
https://docs.hhvm.com/hack/shapes/introduction
а в чемпрофит юзать их перед объектами?

по описанию как то сложнее получается

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

Sergey
09.05.2018
12:35:34
Find usages?
а тебе это часто надо для DTO?

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

нужна структура данных - делай структуру данных

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

Evgenii
09.05.2018
12:37:39
?

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

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

Adel
09.05.2018
12:48:33
$dto->getName(); - это не поведение?
тогда и $someRepository->getById() - тоже не поведение :)

Sergey
09.05.2018
12:48:48
$dto->getName(); - это не поведение?
нет это нарушение инкапсуляции)

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

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
ты же не знаешь что там внутри :)
если это DTO и я не знаю что там внутри - это не DTO

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
и если это не DTO и там есть getName то 90% что я буду злиться
Открываешь %name%DTO, а там бизнес логика ?

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

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

Dmitry
09.05.2018
13:00:39
Открываешь %name%DTO, а там бизнес логика ?
ну там может быть что то типа getName(){return toLower $name} но бизнес логику туда сложновато запихнуть...

Sergey
09.05.2018
13:04:59
а вот кто DTO делает. вы их как называете? UserCreateDTO есть такой суффикс? я в паре проектов видел.. и мне чтото не нравится
мне сама концепция dto не нравится, а так у меня они с суффиксами (как бы я их не любил)

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

Dmitry
09.05.2018
13:14:51
это уже не dto, а какой-то презентер, вью модель или чего еще
а почему нет, дто принимает данные, валидирует, и отдает такие какие они нужны приложению

Sergey
09.05.2018
13:15:25
а почему нет, дто принимает данные, валидирует, и отдает такие какие они нужны приложению
dto не валидирует данные, этим занимается валидатор внешний. иначе это VO. следует разделять эти понятия

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

Sergey
09.05.2018
13:23:41
в таком случае dto вообще лишняя прослойка
вся соль dto - структура данных. И используют для этого классы в основном потому.... что языки эти не предусматривают альтернативы) в c# вон есть struct

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

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

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