Павел
Павел
В просторах интернета спорят постоянно и все видят всё по разному :)
Елнур
Надо просто смотреть первоисточник от Uncle Bob
Вот ответ самого Боба в обсуждении: unclebob 3 сент. 2015 г., 10:31:02 – Clean Code Discussion My view of Entities is that they contain Application Independent Business rules. They are not simply data objects. They may hold references to data objects; but their purpose is to implement business rule methods that can be used by many different applications. Gateways return Entities. The implementation (below the line) fetches the data from the database, and uses it to construct data structures which are then passed to the Entities. This can be done either with containment or inheritance. For example: public class MyEntity { private MyDataStructure data;} or public class MyEntity extends MyDataStructure {...} And remember, we are all pirates by nature; and the rules I'm talking about here are really more like guidelines...
Елнур
Тогда я не понимаю откуда путаница между DDD & Clean Architecture . Если +- одинакого
не хочу сразу написать про различие, пойду подробнее прочитаю Эрика Иванса))
Елнур
А если ответить по сабжу, на счет инкапсуляции Entity... По CA инкапсуляцию доменного слоя можно сделать Request/Response Model объектами и Usecase-ами
Павел
не хочу сразу написать про различие, пойду подробнее прочитаю Эрика Иванса))
Ну там что энтитити это объект, который идентифицируется идентификатором
Nikolay
Елнур
Так инкапсуляция на разных уровнях
Ну так в основном вопрос про защиту данных и т.д. Doctrine Entity & Usecase & DTO - все один бизнес слой, и нет необходимости защищать от самого себя. А уже другие слои/контексты должны обращаться к этому бизнесу через usecase & DTO (Request & Response Model)
Павел
Простой кейс: Если цена ставится меньше 100 - то статус один, если больше 100 - статус другой. Если разместить эту логику вне сущности, то можно забыть это заюзать во втором юзкейсе, который будет юзать изменение цены.
Елнур
Простой кейс: Если цена ставится меньше 100 - то статус один, если больше 100 - статус другой. Если разместить эту логику вне сущности, то можно забыть это заюзать во втором юзкейсе, который будет юзать изменение цены.
Согласен. Изменение цены (если совсем сложная) можно вынести в отдельный класс, который будет считаться частью бизнес слоя (по Бобу Entity). И во всех юзкейсах можно использовать этот класс для изменения цены. Или простая - то в Doctrine Entity
Павел
Поэтому как вариант $entity->changePrice($priceCaclulator, $price). Ну и разные вариации в зависимости от требований
Павел
Но тут опять можно найти проблему, что такой класс сложнее тестировать в юнитах, если калькулятор ходит в БД. Короче каждый сам для себя находит что ему более удобно
Павел
Например тот же Хориков против в юнит тестировании такого подхода
Елнур
по CA, Doctrine Entity - это просто DTO между доменом и ДБ
Павел
по CA, Doctrine Entity - это просто DTO между доменом и ДБ
У меня плохо с англ, но я не вижу этого в ответе Дяди Боба
Павел
My view of Entities is that they contain Application Independent Business rules. They are not simply data objects.
Павел
В CA вообще нет ничего про доктрину)
Елнур
У меня плохо с англ, но я не вижу этого в ответе Дяди Боба
public class MyEntity { private MyDataStructure data;} Посмотрите его пример... Дата структура которая для бд может быть вообще как зависимость.
Елнур
или здесь наш Doctrine используется как Entity Gateway
Елнур
по CA, Doctrine Entity - это просто DTO между доменом и ДБ
но конечно, doctrine entity можем использовать и как бизнес entity, и как dto для БД
Павел
или здесь наш Doctrine используется как Entity Gateway
Как я и писал выше, с примером с SO, кто хочет заморочиться с еще одной сущностью - нет проблем, заморачивайтесь
Павел
Я не вижу критической разницы, тот же repository - это доменный доступ. Представьте, что внутри него как раз уже есть маппинг с entityGateWay на DoctrineEntity )
Павел
Кто вообще сказал, что сущность доктрины - это дто БД
Павел
У нас же датамаппер
Павел
Короче по большей части все это словоблудие ) А Дядя Боб и прочие известные люди - еще одно мнение, просто более авторитетное , чем Вася из интернетов. Прислушиваться или нет, взять всё или часть - это как раз наша задача, чтобы конкретный проект работал, был способен к рефакторингу и масштабированию
Юра
Сейчас вообще страшно кодить. Строку написал и уже нарушил миллион принципов
The Ant
Ничоси, в симфу 6.3 крон из коробки завезли 😄
Павел
Ничоси, в симфу 6.3 крон из коробки завезли 😄
Спустя N лет подсмотрели у Ларавел )))
The Ant
да давно пора
Павел
Ну штука хорошая для простых вещей, все же однопоточка вроде
The Ant
скорее всего да
The Ant
хотя хз, если несколько воркеров подключить м.б. нормально будет работать надо тестить крч
Павел
хотя хз, если несколько воркеров подключить м.б. нормально будет работать надо тестить крч
Ну воркера надо настриивать через крон, что не совсем уже только через приложение :)
The Ant
Ну воркера надо настриивать через крон, что не совсем уже только через приложение :)
не, там добавленны повторяемые задачи в мессенжер, в мессенжере и будет работать. скоко воркеров запустишь стока и будет
The Ant
https://symfony.com/blog/new-in-symfony-6-3-scheduler-component этот
Павел
Ну значит почетче чем я думал
Павел
Получается он просто пушит сообщения по расписанию в мессенджер
Павел
По настройкам мессаджей уже. Значит не однопоточкаа
The Ant
на первый взгляд чет сыровато. как UI к нему писать не понятно, стопать\изменять время...
Павел
на первый взгляд чет сыровато. как UI к нему писать не понятно, стопать\изменять время...
Ну это не про это. Хотя с другой стороны можешь создать свой код генератор. Но надо будет кэш чистить и перезапускать воркер
The Ant
вот вот
The Ant
вся эта управляемая хрень нужна тока чтобы в браузере можно было менять то, что тебе нужно
The Ant
а так... баш скрипт с командами вполне работает )
Павел
вся эта управляемая хрень нужна тока чтобы в браузере можно было менять то, что тебе нужно
Не совсем, например чтобы настройки крона адекватно лежали в приложении
Павел
ну если их еще нет и надо каждый раз прописывать вручную на сервере или в какой нить впс панели
Павел
А это прописал 1 раз команду и всё
The Ant
у меня в кроне чето типа * * * * * cd /path && cron.sh а в башике уже список команд на запуск. Там и асинк можно и синк поочереди. единственное что минимальное время 1 минута да
The Ant
скрипт в репу кладешь просто и всё )
Павел
Даже внутри cron.sh ну или я не совсем понимаю
Vite4eg
А если надо чаще, то в какую сторону смотреть?
Павел
А если надо чаще, то в какую сторону смотреть?
В сторону не крона) Как вариант свой демон с sleep с нужной задержкой
Павел
Vite4eg
Который симфонийский? А он как демон запускается?
Павел
Vite4eg
Месседжи должны куда-то засылаться
Vite4eg
В том, что я не знаю куда )
Павел
Куда и обычные мессаджи шлются
Vite4eg
Раббит?
Павел
Раббит?
Какой транспорт выберете в такой и будет, раббит в том числе
Doctor
А если надо чаще, то в какую сторону смотреть?
Можно посмотреть в сторону таймеров systemd или supercronic. Если лень, то можно накостылить и через крон, например: * * * * * /foo/bar/your_script * * * * * sleep 15; /foo/bar/your_script * * * * * sleep 30; /foo/bar/your_script * * * * * sleep 45; /foo/bar/your_script
Dmitry
ребят как замокать с SensioSecurity там отправляем запрос через клиент isGranted мокается а вот там где требуется isGranted or isGranted уже юзается sensio и вот там тихий ужас
Igor
Всем привет. Первый раз деплою новое симфони приложение и не совсем понимаю, как нынче ставятся енв переменные. Ну т.е. сам фпм с симфони у меня крутится в контейнере, куда прокинуты все нужные переменные, но, будучи в самом контейнере при попытке прописать комманду php bin/console debug:cont --env-vars, выкидывается сообщение: No environment variables are being used. Да и в целом видно, что переменные симфони приложение не видит, так как выкидывается соответствующая ошибка при попытке как-то с ними повзаимодействовать (к примеру dbal:run-sql). Может чего-то не понимаю и делаю не так? $_SERVER также дает мне список моих перемен, которые берутся из окружения. symfony 6.4.3 php 8.1
Kirill
создаётся файл .env.local и в него запихиваются эти переменные
Kirill
Хотя я предпочитаю наоборот, добавлять .env в гитигнор и в него уже пихать нормальные переменные. Как минимум потому что он подхватывается докером ещё, так что приписав конфиг для какой-нибудь базки - они автоматом доступны и в докере
Igor
создаётся файл .env.local и в него запихиваются эти переменные
Так, и он каждый раз будет пытаться его парсить получается?
Kirill
там вроде даже команда какая-то была, которая это делает
Kirill
APP_ENV=prod APP_DEBUG=0 php bin/console dotenv:dump https://symfony.com/doc/current/configuration.html#configuring-environment-variables-in-production