Vite4eg
Интерфейс для получения всех интерфейсов...
Kirill
Не пишу интерфейсы тем более для сервисов. Ладно ещё репозитрий (хотя тоже холивар), но какой профит от сервиса?
репозиторий с методами для получения данных? или о каком-то другом репозитории речь?
The Ant
Всем привет! Подскажите, как вы используете интерфейсы для сервисов? У меня три варианта: 1) Для каждого сервиса пишется свой интерфейс 2) Не писать интерфейсы 3) Писать общие интерфейсы. Например, многие сервисы имеют методы getAll() и getById(). Третий вариант мне нравится, но меня вот что коробит. Если такой интерфейс написать, то там нельзя будет указать возвращаемый тип, потому что метод getById в UserService вернет User, а в CarService вернет Car. Дальше мне приходит мысль объединить все entity общим интерфейсом, например EntityInterface и его возвращать в методе getById в интерфейсе для сервисов. Но тут возникает вопрос: нормально ли, что в интерфейсе будет одно возвращаемое значение, а в реализации другое? Поделитесь, пожалуйста, как вы используете интерфейсы
Интерфейсы нужны когда планируется изменение поведения сервиса, через стратегию например. Или для контроля взаимодействия с внешними штуками всякими
Kirill
Спасибо. Мне нужно это обдумать
Kirill
Почему у вас у всех коты на аватарках?)
The Ant
у меня другой вопрос, должны ли сущности дохтрины учавствовать в бл? чет заморочился последнее время этим вопросом
Павел
у меня другой вопрос, должны ли сущности дохтрины учавствовать в бл? чет заморочился последнее время этим вопросом
Ну я вижу три варианта: 1) Сущность участник БЛ, рич моделька. Логика в сущностях + сервисах. 2) Сущность не участник БЛ, анемик моделька, логика в сервисах 3) Харкор, но прям очень спорный. Сущность не участник БЛ, анемик моделька, есть отдельные Сущности не доктрины, на которые мапятся сущности доктрины. Вот уже эти сущности рич, участвуют в БЛ.
Юра
Так как сущности не сервисы, писать в них бизнес логику не очень хорошо наверное
Юра
Ну и если идти по такому пути как бизнес логика в сущностях, получаются обычно очень раздутые модели, которые сложно сопровождать. Как по мне это нарушение сингл респонсибилити
Юра
Кого делить? Сущности?
Nikolay
Кого делить? Сущности?
Делать vo и тд, embedded
The Ant
Ну я вижу три варианта: 1) Сущность участник БЛ, рич моделька. Логика в сущностях + сервисах. 2) Сущность не участник БЛ, анемик моделька, логика в сервисах 3) Харкор, но прям очень спорный. Сущность не участник БЛ, анемик моделька, есть отдельные Сущности не доктрины, на которые мапятся сущности доктрины. Вот уже эти сущности рич, участвуют в БЛ.
Ну вот третий вариант видел в ддд проекте, где у домена всё своё внутри, а стейт сохраняется через ивенты вообще ) Т.е. мапинг на сущности доктрины в ивентах домена и в бд. Потом задался вопросом на кой член так делать вообще? чем плоха ентитя доктрины как дто?
Павел
Ну вот третий вариант видел в ддд проекте, где у домена всё своё внутри, а стейт сохраняется через ивенты вообще ) Т.е. мапинг на сущности доктрины в ивентах домена и в бд. Потом задался вопросом на кой член так делать вообще? чем плоха ентитя доктрины как дто?
А чем ентити доктрины не домен? Про ентития доктрины = дто вообще не понял. Я такой подход видел на стековерфлоу как для жуткого интерпрайза, который вообще ото всего наружнего открещивается
Павел
ну вот домен полностью изолирован ото всего, там чистая логика, и свои дтошки персистенс отдельно стоит
А почему ентити доктрины это персистенс? Представь что ты пилишь домен, написал сущности, написал репозитории. Потом такой, а возьму ка я доктрину и написал рядом xml маппинг.
The Ant
Персистенс итак спрятан за mapper
так ентитя часть доктрины, считай персистенс слой
Nikolay
так ентитя часть доктрины, считай персистенс слой
С абстракцией сохранения данных и связями
Павел
так ентитя часть доктрины, считай персистенс слой
Почему ты так решил? Если маппинг лежит где то сбоку, каким образом чистый php класс в твоем проекте - это доктрина?
Павел
Даже если в аннотациях лежит, это нормально
Ну тут спорно, потому что меняем персистенс - лезем в слой домена для изменений. Хотя сам юзаю онли анотации/атрибуты. Не вижу смысла для спора :)
Павел
поэтому в репозиториях доктрины появились методы save\remove? 😄
Ну тут хз ) Я для себя не нашел ответа на этот вопрос . Вроде без этих методов нельзя сменить на что-то без uow, и какой то флаш болтается. С другой внутри репо для одной сущности - флаш всего стейта системы
The Ant
да это вообще дичь, если в цикле сохраняешь даже ) персист всех, а потом все равно надо менеджер дергать наскоко я понял была идея не тащить везде ем как зависимость
Юра
Бизнес логика в орм приводит к тому что в определенный момент тебе вообще стремно делать flush() потому что без понятия сколько всего будет сделано под капотом и что там происходит
Юра
И иногда тебе нужно просто сделать флаш, без бизнес логики
Юра
Этот холивар уже был
Павел
Странный флоу
Хотя не, наверное можно найти применение, соглашусь
Юра
Поиходит к тебе манагео и говорит нужно тут срочно обновить статусы транзакциям, задним числом, пришел отчет из банка
Павел
Этот холивар уже был
+ не будем разводить)
Юра
И ты такой сори у меня тут бизнес логика на любой чих изменения модели
Павел
флаш и так транзакция )
Это понятно, но почему стоит бояться нативной транзакции - не понятно
Юра
А если нужно руками?
Юра
Дать возможность менять из админки супер админу какому-то
Павел
А если нужно руками?
Значит есть такая потребоность, и это часть бизнес задач
Павел
И может быть сеттер на это
Юра
Так у тебя там бизнес логика
Юра
В сеттере, в листенерах и вездк
Nikolay
Дать возможность менять из админки супер админу какому-то
Не всегда такая возможность есть, проще получить список, что поменять, на что поменять
Павел
Как это в коде потроить - вопрос другой
Павел
Если например один метод должен что то запускать а второй нет - это вопрос реализации. Если того требует бизнес, значит надо что бы было 2 точки изменения
Павел
Тут конкретный кейс: админ должен иметь возможно менять вот такое значение без каких либо других вещей.
Павел
Кто мешает сделать еще один метод - не понятно
Павел
Либо вообще это будет через БД реально
Павел
Отдельный флоу который тупо апдейт колонку
Юра
Никто не мешает. Вопрос насколько это все удобно и хорошо
Юра
Короче суть в том что когда у тебя орм превращается в хранилищем бизнес логики, очень стремно с ним работать становится
Юра
Ну чисто мой опыт такой. Возможно что-то не так было сделано
Павел
Тут главное что - не возводить все в абсолют. Где удобно в ентити - там в ентити, где удобнее в сервисах - там в сервисах
Павел
А где то тупо в БД колонку поменять)
Юра
Еще кейс. Это конечно экзотика но.. иногда у тебя вместо орм некие удаленные энтити
Юра
В плане external
Юра
Если бизнес логика не привязана к орм это проще сделать
Павел
Если бизнес логика не привязана к орм это проще сделать
Может мы по разному понимаем бизнес логика привязана к орм ? Это вообще как?
Юра
Ну а о чем тут разговор?
Павел
Ну а о чем тут разговор?
Ну тут разговор о рич/анемик. Но даже в риче я не вижу привязки к орм
Павел
И для меня теоретически какая разница в какой репозиторий я отправлю сущность, в доктриновский или external ?
Павел
Один сохраняет в БД, второй - данные по api
Павел
@Cawa87
Aleksandr
@Cawa87
спс
Максим
Всем привет. Подскажите, кто использует логгер Monolog + ElasticSearch почему не попадают логи уровня Critical в ES из Messenger с асинхронной командой? При этом в логе супервизора var/log/supervisor есть...
Максим
Максим
Vlad
а почему именно c помощью symfony отправляете логи?
Максим
а почему именно c помощью symfony отправляете логи?
Ой, извините, пропустил сообщение… А с помощью чего отправлять, если использую симфони мессенджер?