Size: a a a

2021 June 25

D

Dmitry in symfony
да все тоже что и обычная модель
источник

D

Dmitry in symfony
рид модель - это просто дабы брать данные как мне нужно, быстро и эффективно а не через орм
источник

Ш

Шурик in symfony
где-то тут проскакивало по чату
источник

Ш

Шурик in symfony
источник

D

Dmitry in symfony
просто на запросы чтения вида
GET /cars/list?filter....
я буду брать из базы данные не через сущность а чистым скл для скорости
источник

Р

Роман in symfony
спасибо)
источник

Р

Роман in symfony
Меня смущает в рид модели её практически неотделимость от доступа к БД.

У меня такой кейс. Есть 2 проекта: один легаси с AR, второй - это переписываемый первый c доктриной. Но переписывается не тупо с фреймворка на фреймворк, а с постепенным выносом бизнес-логики в отдельный core пакет, в котором красивая доменная модель, куча валидации и тестов. core через composer подключается в проект-consumer.

В core - чистая domain model, UseCases для неё и интерфейсы-адаперы. UseCases - это в основном запись, а вся инфраструктура для доступа к базе скрыта за адаптерами. То есть их конкретная реализация пишется уже в проекте-consumere core.

Так вот если с UseCases понятно и все красиво, то с ReadModel не очень понятно. Потому что с одной стороны хочется некоторые Queries вынести в core  и сделать частью core функциональности приложения, с другой стороны, по идее вынести можно только какие-то DTO-объекты, а Fetcher-ы вынести не получится так как они обычно используют базу напрямую (то есть чистый SQL пишется).

Или может я размышляю о несовместимых вещах.. Или может быть рид модель все таки специфична для каждого consumer-проекта и тут это неприменимо.
источник

S)

Shokha )) in symfony
почти точь  точь как у Eliseev'а))
источник

Р

Роман in symfony
да там явно пуля в пулю
источник

D

Dmitry in symfony
так рид модель и есть ядро
источник

D

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

D

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

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

Р

Роман in symfony
То есть в этой логике знание о конкретной БД и инфраструктура для доступа к ней являются частью ядра?
источник

D

Dmitry in symfony
да, а ядро выставляет наружу некий апи для доступа
источник

D

Dmitry in symfony
под словом апи не нужно понимать рест :)
источник

D

Dmitry in symfony
хотя опять же, смотря что вы называете ядром, может мы по-разному понимаем
источник

D

Dmitry in symfony
может у вас ядро это чистая бизнес логика
источник

Р

Роман in symfony
Идея моего ядра была в том, чтобы отвязаться от кучи ларовских недомоделей, и вообщем-то от доктрины и вынести бизнес-логику как раз в отдельное место, никак от инфраструктуры не зависящее.

таким образом можно постепенно это ядро в новой версии использовать сразу и это сводится к подставлению нужных реализаций адаптеров для инфраструктурных сервисов и реализации Presenter слоя в виде какого-то API (контроллеры валидируют входящие данные, дергают нужные юз-кейсы, форматируют вывод). Говоря о данных, по факту просто реализации репозиториев делаются и инжектятся в ядро.

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

D

Dmitry in symfony
ясно, я понял это по-другому
тогда мои идеи не применимы к вашей архитектуре
источник

D

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

может быть вам стоит подумать в сторону чтобы и инфрастуктуру вынести в отдельный проект аля как ядро
источник