Елнур
Павел
Павел
В просторах интернета спорят постоянно и все видят всё по разному :)
Елнур
Надо просто смотреть первоисточник от 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...
Павел
Елнур
Елнур
А если ответить по сабжу, на счет инкапсуляции Entity...
По CA инкапсуляцию доменного слоя можно сделать Request/Response Model объектами и Usecase-ами
Павел
Павел
Nikolay
Елнур
Так инкапсуляция на разных уровнях
Ну так в основном вопрос про защиту данных и т.д. Doctrine Entity & Usecase & DTO - все один бизнес слой, и нет необходимости защищать от самого себя. А уже другие слои/контексты должны обращаться к этому бизнесу через usecase & DTO (Request & Response Model)
Павел
Павел
Простой кейс:
Если цена ставится меньше 100 - то статус один, если больше 100 - статус другой.
Если разместить эту логику вне сущности, то можно забыть это заюзать во втором юзкейсе, который будет юзать изменение цены.
Павел
Павел
Поэтому как вариант $entity->changePrice($priceCaclulator, $price). Ну и разные вариации в зависимости от требований
Павел
Но тут опять можно найти проблему, что такой класс сложнее тестировать в юнитах, если калькулятор ходит в БД.
Короче каждый сам для себя находит что ему более удобно
Павел
Например тот же Хориков против в юнит тестировании такого подхода
Елнур
Елнур
Елнур
по CA, Doctrine Entity - это просто DTO между доменом и ДБ
Павел
My view of Entities is that they contain Application Independent Business rules. They are not simply data objects.
Павел
В CA вообще нет ничего про доктрину)
Елнур
или здесь наш Doctrine используется как Entity Gateway
Елнур
Павел
Я не вижу критической разницы, тот же repository - это доменный доступ. Представьте, что внутри него как раз уже есть маппинг с entityGateWay на DoctrineEntity )
Павел
Кто вообще сказал, что сущность доктрины - это дто БД
Павел
У нас же датамаппер
Павел
Короче по большей части все это словоблудие ) А Дядя Боб и прочие известные люди - еще одно мнение, просто более авторитетное , чем Вася из интернетов. Прислушиваться или нет, взять всё или часть - это как раз наша задача, чтобы конкретный проект работал, был способен к рефакторингу и масштабированию
Юра
Сейчас вообще страшно кодить. Строку написал и уже нарушил миллион принципов
The Ant
Ничоси, в симфу 6.3 крон из коробки завезли 😄
Павел
The Ant
да давно пора
Павел
Ну штука хорошая для простых вещей, все же однопоточка вроде
The Ant
скорее всего да
The Ant
хотя хз, если несколько воркеров подключить м.б. нормально будет работать
надо тестить крч
Павел
The Ant
https://symfony.com/blog/new-in-symfony-6-3-scheduler-component
этот
Павел
Павел
Ну значит почетче чем я думал
Павел
Получается он просто пушит сообщения по расписанию в мессенджер
Павел
По настройкам мессаджей уже. Значит не однопоточкаа
The Ant
на первый взгляд чет сыровато. как UI к нему писать не понятно, стопать\изменять время...
The Ant
вот вот
The Ant
вся эта управляемая хрень нужна тока чтобы в браузере можно было менять то, что тебе нужно
The Ant
а так... баш скрипт с командами вполне работает )
Павел
Павел
ну если их еще нет и надо каждый раз прописывать вручную на сервере или в какой нить впс панели
Павел
А это прописал 1 раз команду и всё
The Ant
у меня в кроне чето типа * * * * * cd /path && cron.sh
а в башике уже список команд на запуск. Там и асинк можно и синк поочереди.
единственное что минимальное время 1 минута да
The Ant
скрипт в репу кладешь просто и всё )
Павел
Павел
Даже внутри cron.sh ну или я не совсем понимаю
The Ant
Vite4eg
А если надо чаще, то в какую сторону смотреть?
Павел
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
Kirill
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