Юра
Ни то ни се
Павел
Полумера чего?
Юра
Той же команды
Павел
Команда тут ни при чем :)
Павел
3 основные пользы от дто (может что упускаю): 1) Типизировнная структура как сказал Константин 2) Группировка в объект большого количества параметров метода 3) Разделение на слои. Это вроде изначальная задача была. Чтобы слои не знали друг о друге - данные передаются через дто, а не сковзняком сверху вниз (например http реквест летит до БД). Хотя и в другую сторону, тоже через ДТО
Пилот
Дело не в том, что это прям плохо, дело просто в подходе. Инкапсулирование логики в сущности дает некую защиту. С другой стороны, много сущностей почти без собственной логики и обычные круды. Например брать апи платформу, она вообще десериализует реквест сразу на энтити,без форм. Там же и валидирует, и сериалайз делает, и акссес лаер - все в сущности. И в принципе, это очень удобно и быстро там где почти нет логики. Но где логика - придаст боли и проблем. Некоторые вообще используют паралельно несколько методов, плюс вообще транзакшн скрипт, и это неплохо. Короче вопрос неоднозначный. Просто хорошо знать плюсы, минусы и варианты.
> Некоторые вообще используют паралельно несколько методов, плюс вообще транзакшн скрипт, и это неплохо. не до конца понял момент насчет несколько методов и транзакшн скрипта) это в апи платформе?
Пилот
и вдогонку насчет транзакшн скрипта - это ведь по сути любой стейтлесс сервис?
Пилот
транзакшн скрипт - это агрегат рут, потому что это юнит транзакции? юзкейс - транзакшн скрипт? доменный или апликейшен или инфрасервис которые стейтлесс - это транзакшнскрипт?)
Пилот
и еще чуть говна на вентилятор: дто - это транзакшн скрипт? 😄
Пилот
если например логика обработки в конструкторе
Пилот
ну чуть более сложная чем ассайн параметров в проперти дтошки
Павел
Павел
> Некоторые вообще используют паралельно несколько методов, плюс вообще транзакшн скрипт, и это неплохо. не до конца понял момент насчет несколько методов и транзакшн скрипта) это в апи платформе?
Нет, это просто я все в куче привел) что есть разные методы работы и они норм для своих задач. Транщакшн скрипт - это грубо говоря функция где и логика и работа с бд сразу. Короче по старинке, без какого либо разделения)
Павел
Это паттерн, можно вбить почитать) где примерно там где row gateway(Active record) , table gateway, data maper
Пилот
3 основные пользы от дто (может что упускаю): 1) Типизировнная структура как сказал Константин 2) Группировка в объект большого количества параметров метода 3) Разделение на слои. Это вроде изначальная задача была. Чтобы слои не знали друг о друге - данные передаются через дто, а не сковзняком сверху вниз (например http реквест летит до БД). Хотя и в другую сторону, тоже через ДТО
насчет 3 пункта - если разделять на инфра, апликейшен и доменный слои, дтошка разве не используется только на слое инфра, где создается и заполняется команда из апликейшен слоя, которая уже в хендлере конвертируется в доменные велью обжектс и прочий движ?
Пилот
ну то есть дто в контексте домена вообще быть не может типа
Пилот
а апликейшен хз) мб допустимо
Пилот
ну то есть дто в контексте домена вообще быть не может типа
ну точнее велью обжект тоже дто какой-никакой если так посмотреть наверное) но технического понятия как дто в домене нема
Пилот
Дто это объект передачи между частями приложения.
то бишь внешние инфраструктурные вендоры
Юра
Короче дто придумали для статически типизированных языков чтобы передавать данные
Павел
то бишь внешние инфраструктурные вендоры
Не обязательно. Если я из сервиса передаю в бд тупые данные через объект - это тоже дто
Павел
Возвращаю из бд набор тупых данных - тоже дто
Павел
Из сервиса я могу вернуть ещё выше - свою отдельную дто которую сделаю после вычислений их 5 разных дто из бд и 2 из апи стороннего
Пилот
Возвращаю из бд набор тупых данных - тоже дто
ну так тупые данные из бд не касаются домена или апликейшен слоя? соответственно из сервиса в бд тупые данные тоже не домен или апликейшен (мб) )
Пилот
то я не спор ради спора, то я чисто для себя тоже утверждения удостоверить некоторые) может что не так понимаю
Пилот
то есть дтошка это именно зачастую инфраструктурный слой, максимум - апликейшен
Павел
Ну например у сущности может быть метод, который принимает некий объект, как структуру. Если сущность принимает этот объект, то это часть домена. Мы вполне можем этот объект заполнить выше в апликейшене а то и в контроллере или даже получить из бд. Считать это дто или нет - вопрос, но думаю на пустом месте обсуждение, которое абсолютно ничего не решает.
Пилот
вот пример
Пилот
Пилот
Пилот
это ведь скорее велью обжект если уже в домене?
Павел
это ведь скорее велью обжект если уже в домене?
Value object и dto отличает не наличие где они, а наличие в них логики
Пилот
то есть иногда если VO без логики - то это дто? ты об этом? но ведь у нас в контексте ddd есть такие компоненты системы как сущности, агрегаты (рут или не рут) и велью обжекты, и доменные сервисы
Пилот
и VO иногда можно понимать как дто, это понятно)
Павел
Тут нет иногда, не иногда
Пилот
дада, это верно
Konstantin
там чутка название проекта торчит, если вдруг это критично 🙂
Пилот
там чутка название проекта торчит, если вдруг это критично 🙂
бле, спс, хотел закропить анонимно, но то такое, пофигу в принципе)
Пилот
промазал чутка)) хай буде)
Павел
Value object без логики, это про сути и есть dto
Хотя наверное я не прав. Какой нить адрес, это vo но при этом не имеет логики.
Павел
Так что дто все же видимо про передачу
Пилот
в инфре?
Пилот
или как struct object
Павел
Уже не шибко важно, написано между частями приложения)
Пилот
ну то етсь иногда ВО это ДТО ) это понятно) тк ДТО это скорее имплементация, а во это терм в ддд
Пилот
да я думаю на ты можно) то я не утверждаю, а скорее полуутвердительно-полувопросительно кек
Пилот
вкидываю чутка на обсуждение скжмтк
Павел
Ну я короче хз, потому что это дрочь терминологии, и кто как пишет. Например кто то не будет передавать vo между слоями, значит никогда vo не станет dto.
Павел
И возможно это на самом деле верно
Павел
Но на практике, никто не мешает создать money, email снаружи и передать как часть дто.
Павел
DTO vs POCO vs Value Object / Habr https://habr.com/ru/post/268371/
Павел
Ну вот а тут написано, что не пересекаются
Пилот
Короче сабтайпы один другого в зависимости от контекста исполнения)
Пилот
Но это неточно )
Dmitriy
Vo имутабельны, дто нет
The Ant
в джсе всё объект, и любая переменная по типу let a = 2 является VO
The Ant
в питухоне та же история. Откуда это правило про иммутабельность? Опять рандом хуй с интернетов вещает?
Nikolay
в питухоне та же история. Откуда это правило про иммутабельность? Опять рандом хуй с интернетов вещает?
VO иммутабельно. Везде написано про этот паттерн. Можешь посмотреть на примере Money
The Ant
VO иммутабельно. Везде написано про этот паттерн. Можешь посмотреть на примере Money
даже в джаве всё объект, хочешь сказать переменной, присвоенной какое-то значение нельзя его изменить?
The Ant
у вас проблемы с пониманием терминов )
The Ant
а что тогда?
Nikolay
а что тогда?
просто объекты
The Ant
которые и есть значение
Nikolay
которые и есть значение
если они изменяемые, то нет
The Ant
откуда это правило?
Nikolay
откуда это правило?
Из описания паттерна
The Ant
понимание термина паттерн есть?
The Ant
это шаблон, по русски блять. какой у во шаблон? )
Null
Имхо. Vo это набор свойств. Типа цвет красный форма круглый.
Павел
даже в джаве всё объект, хочешь сказать переменной, присвоенной какое-то значение нельзя его изменить?
Ну там идея, что если надо изменить, то создается новый. В целом смысл в этом есть. Деньга не может просто взять и измениться, если она меняется - это новая деньга. Адрес тоже самое. Вроде как это дожлно увеличить предсказуемость поведения кода.