Цитата (Santehnick @ 9.02.2018 - 10:53) |
нужен доменный сервис. |
Вопрос, как я понял, не в том. Вопрос в том, где этот сервис задействовать. Если
Цитата (Invis1ble @ 8.02.2018 - 09:59) |
В конструкторе сущности User |
то валидация на уникальность будет производится всегда, надо оно или нет. А если в контексте, то
Цитата (Invis1ble @ 8.02.2018 - 09:59) |
тогда у нас нет уверенности, что клиент не забудет вызвать валидацию. Фактически, мы больше не можем полагаться на аксиому о консистентности модели (invariants). |
Или я чего то не так понял?
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.
Но application layer по сути и есть контекст. А Invis1ble мучает вопрос инвариантности. Он же написал:
Цитата (Invis1ble @ 8.02.2018 - 09:59) |
Но тогда у нас нет уверенности, что клиент не забудет вызвать валидацию. |
UPD Тут пример с хэшированием не очень подходит. Если не захэшировать пароль при аутентификации, ничего не выйдет. Так что его можно задействовать в контексте.
Валидация - дело другое. Если клиент её "забудет", то есть опасность навтыкать одинаковых логинов. Причем система будет довольно урчать. До поры до времени.
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.
Значит по сути я мыслил в верном направлении. :)
Вот это имелось ввиду?
class User
{
public function setLogin($login)
{
$this->login = $login;
}
public function setPassword($password)
{
$this->password = $password;
}
public function registration()
{
}
public function enter()
{
}
}
class UserRegistrationService
{
public function __construct($login, $password, $confirm)
{
$this->login = $login;
$this->password = $password;
$this->confirm = $confirm;
$this->user = new User;
}
public function registration($checker)
{
$this->setLogin($checker);
$this->setPassword();
$this->user->registration();
return $this->user;
}
protected function setLogin($checker)
{
if (!$checker->checkLogin($this->login)) {
throw new Exception();
}
$this->user->setLogin($this->login);
}
protected function setPassword()
{
if ($this->password !== $this->confirm) {
throw new Exception();
}
$this->user->setPassword($password);
}
}
$service = new UserRegistrationService('login', 'password', 'password');
$service->registration(new UsernameAlreadyRegisteredChecker);
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.