Цитата (Invis1ble @ 10.02.2018 - 06:23) |
Это Value Object, причем реюзабельный. |
$checker = new UsernameAlreadyRegisteredChecker();
$usernameFactory = new UsernameFactory($checker);
$username = $usernameFactory->createUsername('John');
(new User($userId))->changeUsername($username);
$this->checker->addStorage((string)$instance);перед ретурном в createUsername()
Цитата |
Такие вопросы должны разруливаться на инфраструктурном уровне, в контексте доменного слоя об этом говорить не уместно, имхо. |
Цитата (Invis1ble @ 8.02.2018 - 09:59) |
Но тогда у нас нет уверенности, что клиент не забудет вызвать валидацию. |
$username = $this->usernameFactory->createUsername($command->username);
$user = User::register(new UserId($command->userId), $username);
$this->userRepository->save($user);
Цитата (twin @ 10.02.2018 - 11:39) |
Всё, дошло. Как до жирафа)) Фишка в том что User не примет ничегo, кроме Username $username |
Цитата (twin @ 10.02.2018 - 11:39) |
Писать такие "агрегаты" smile.gif ради защиты от дурака... Не слишком ли много чести... |
Цитата (Invis1ble @ 10.02.2018 - 07:47) |
в application layer есть сервис, который отвечает за регистрацию пользователя |
Цитата (Invis1ble @ 10.02.2018 - 07:47) |
так что всё прекрасно сохраняется. |
Цитата (Invis1ble @ 10.02.2018 - 07:53) |
Если ты Hello World пишешь, или бложик - то DDD вообще не нужно. |
Цитата (twin @ 10.02.2018 - 12:30) |
Получается, что на любой чих нужно сохранять объект User в репозитории и доставать его снова. Хм... |
Цитата (twin @ 10.02.2018 - 12:30) |
Интересно посмотреть на реализацию UsernameAlreadyRegisteredChecker |
Цитата (twin @ 10.02.2018 - 12:30) |
Это детский аргумент из области старых холиваров OOП vs процедуры. |
Цитата (twin @ 10.02.2018 - 12:30) |
DDD, это стратегическое проектирование, к нашему разговору имеет опосредствованное отношение. |
Цитата (Invis1ble @ 10.02.2018 - 08:51) |
Я не знаю, что ты там себе нафантазировал. |
Цитата (twin @ 10.02.2018 - 13:04) |
Не обязательно это вовсе. |
Цитата (Invis1ble @ 10.02.2018 - 09:07) |
Однако, как ты мог заметить, мы находимся на форуме phpforum и прямо сейчас разбираем код на php |
Цитата (Invis1ble @ 10.02.2018 - 08:51) |
Какой еще "любой чих"? Если у тебя в предметной области пользователь имеет возможность поменять своё имя, то как ты без сохранения это сделаешь? |
Цитата (twin @ 10.02.2018 - 13:22) | ||||
Причем тут PHP))) Я про то, что слишком все усложняется. Если хочешь аналогию с форумом, то написать Привет мир! можно через echo, а можно задействовать TWIG. Просто ты говоришь, что большого проекта без TWIG не построить. А я говорю - херня, можно обойтись нативом.
Никак. Но я не про это. Я про то, что любой сервис должен начинать работу с того, что достать объект из репозитория, а закончивать тем, что положить его обратно (если он мутировал). Не передавать его друг другу напрямую, только через репозиторий (скорее всего БД). Иначе вся твоя защита не стоит выкушеного яйца. Я так не писал никогда, просто могу представить себе наклдные расходы.. |
Цитата (Invis1ble @ 10.02.2018 - 09:58) |
Если хочешь - создай отдельные темы, пусть там идёт обсуждение. |
Цитата (Invis1ble @ 10.02.2018 - 09:58) |
Сейчас меня интересуют мнения касательно моей реализации и, что особенно важно, возможных подводных камней. |
if ('' === $username) {
throw new \InvalidArgumentException();
}
Цитата (twin @ 10.02.2018 - 16:21) |
Ну так навскидку, вот это фигня какая то |
Цитата (twin @ 10.02.2018 - 16:21) |
И вопросик... Это ты по приколу так пишешь или реально? UsernameAlreadyRegisteredCheckerInterface |
Цитата (Invis1ble @ 10.02.2018 - 12:50) |
Тебя длина названия что-ли смущает? |
Цитата (twin @ 10.02.2018 - 16:56) | ||
Да. |