skwee
Новичок
Добрый день!
У меня в системе есть сущности (Entity) и есть объекты значения (Value Object).
Например:
Объекты значения умеют валедировать себя. то есть такое не прокатит:
Сущность содержит в себе объекты значения:
Теперь проблемы:
1. Можно создать только валидную сущность, то есть если при ее создании что то из ее value objectов не валидно то должен быть брошен эксепшен.
но ради удобства я бы хотел получить все ошибки при валидации, а как мы все знаем если username не валиден то проверка password и email уже не совершится из за эксепшена который бросит ValueObject\Username::validate()
2. Сущность не может иметь не валидное состояние, то есть это
должно сразу кинуть эксепшен (это я говорю к тому что нельзя перенести валидацию например на этап сохранения сущности в БД или вызова некого метода $user->validate()).
3. При восстановлении из БД, сущность валедировать не надо (я предполагаю что если она уже в БД то прошла валидацию).
Посоветуйте пожалуйста способ валидации чтобы выполнялись все 3 условия.
Спасибо за ранее!
У меня в системе есть сущности (Entity) и есть объекты значения (Value Object).
Например:
PHP:
class ValueObject {
public function __construct() {
$this->validate();
}
protected function validate() {
}
}
class EmailAddress extends ValueObject {
private $email;
public function __construct($email) {
$this->email = $email;
parent::__construct();
}
protected function validate() {
if(not $this->email is valid email)
throw new InvalidValueObjectException('Email address is invalid');
}
}
PHP:
$email = new ValueObject\EmailAddress('foo');
Сущность содержит в себе объекты значения:
PHP:
class User extends Entity {
private $email;
public function getEmail() { return $this->email; }
public function setEmail($addr) { $this->email = new ValueObject\EmailAddress($addr); }
}
Теперь проблемы:
1. Можно создать только валидную сущность, то есть если при ее создании что то из ее value objectов не валидно то должен быть брошен эксепшен.
PHP:
public function User::__construct($username, $password, $emailAddress) {
$this->username = new ValueObject\Username($username);
$this->password = new ValueObject\PasswordHash($password);
$this->email = new ValueObject\EmailAddress($emailAddress);
}
2. Сущность не может иметь не валидное состояние, то есть это
PHP:
$user->setEmail('foo');
3. При восстановлении из БД, сущность валедировать не надо (я предполагаю что если она уже в БД то прошла валидацию).
Посоветуйте пожалуйста способ валидации чтобы выполнялись все 3 условия.
Спасибо за ранее!
