[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проверка уникальности сущности в рамках DDD
Страницы: 1, 2, 3, 4, 5
twin
Цитата (Santehnick @ 9.02.2018 - 10:53)
нужен доменный сервис.
Вопрос, как я понял, не в том. Вопрос в том, где этот сервис задействовать. Если
Цитата (Invis1ble @ 8.02.2018 - 09:59)
В конструкторе сущности User
то валидация на уникальность будет производится всегда, надо оно или нет. А если в контексте, то
Цитата (Invis1ble @ 8.02.2018 - 09:59)
тогда у нас нет уверенности, что клиент не забудет вызвать валидацию. Фактически, мы больше не можем полагаться на аксиому о консистентности модели (invariants).

Или я чего то не так понял?


_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
twin
Но application layer по сути и есть контекст. А Invis1ble мучает вопрос инвариантности. Он же написал:
Цитата (Invis1ble @ 8.02.2018 - 09:59)
Но тогда у нас нет уверенности, что клиент не забудет вызвать валидацию.


UPD Тут пример с хэшированием не очень подходит. Если не захэшировать пароль при аутентификации, ничего не выйдет. Так что его можно задействовать в контексте.

Валидация - дело другое. Если клиент её "забудет", то есть опасность навтыкать одинаковых логинов. Причем система будет довольно урчать. До поры до времени. smile.gif

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
twin
Значит по сути я мыслил в верном направлении. :)

Вот это имелось ввиду?
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);


_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.