Смешиваются инфраструктурный слой(знание о реализации репозитория), domain слой(добавление телефона), и презентационный слой - редирект.Что в этом коде недетерминированного, или неявного?PHP:try { $user = $userRepository->create($req->getBody()); $user->addPhone(...); $trx->commit(); $res->redirect('profile', ['id' => $user->getId()]); } catch (\Exception $e) { $trx->rollback(); throw $e; }
строить отношения товар-корзина, через cqrs глупо, ибо это один контекст и один доменIn particular CQRS should only be used on specific portions of a system (a Bounded Context in DDD lingo) and not the system as a whole. In this way of thinking, each Bounded Context needs its own decisions on how it should be modeled.
Фаулер утверждает следующее: CQRS — это сложно, применять нужно только в определённых контекстах. Ты говоришь: товар-корзина в одном контексте, поэтому CQRS тут применять глупо. Логика?строить отношения товар-корзина, через cqrs глупо, ибо это один контекст и один домен
противоречит словам Фаулера полностью.cqrs глупо, ибо это один контекст и один домен
Я в свою очередь начал с вопроса про список проблем, которые возникают, для определения сферы применимости. Если этих проблем нет - тебе это не нужно.The mainstream ... is a CRUD datastore.
As our needs become more sophisticated we steadily move away from that model.
... in more complicated domains, having the same conceptual model for commands and queries leads to a more complex model that does neither well.
Добавление товара в корзину — это не создание новой сущности. О каком id идёт речь?пользователь ткнул добавит товар в корзину, отправился запрос, пришел ответ с сервера 204, js добавил товар в плашку с корзиной, нафига тут id?
Да видали уже такой подход, и я солидарен вот с этим чуваком: https://groups.google.com/forum/#!searchin/dddinphp/event$20controller/dddinphp/PoUdMKdqMuE/ZYZlpyrdwa4Jhttps://github.com/qandidate-labs/broadway/blob/master/examples/command-handling/command-handling.php
намекну, то, что внизу, должно быть в контроллере
final class User
{
public function register($id, UserName $name, Email $email, ...)
{
$user = new self(...);
$user->record(new UserHasRegisteredEvent($this->id));
$user->onModeration();
return $user;
}
private function onModeration()
{
$this->status = Status::onModeration();
$this->record(new UserHasBeenSentOnModerationEvent($this->id));
}
}
Следующее его сообщение содержит информацию о том, как жить с CQRS без предварительной генерации id:строить отношения товар-корзина, через cqrs глупо
Я запутался, @Redjik. Какой подход ты пытаешься защитить, что пытаешься донести?Ладно, на пальцах,
<...>
кровь из носа нужно вернуть на клиент id, да еще и в вебе?
ну так и делайте блин через контроллер, команда отработала, эвент запустился, контроллер вернул результат
Никакой =) Я болею, не могу мысли нормально выразить =(((
Я нигде такого не говорил, мне нравится подход с генерацией uuid на клиенте, возможно, даже больше.И я не понял: это ты это «на пальцах» объяснял, что нафиг не нужно генерировать id до команды? AUTO_INCREMENT рулит? Серьезно?
так вон Матиаз показывает в той же ссылке (у него кстати классный доклад есть про CRUD головного мозга, найти?)Покажи аналог без $id, c AUTO_INCREMENT.