Я создаю свой первый более крупный проект, используя доктрину, которую сейчас люблю и ненавижу!
Вот что я не понимаю: Почему это нормально, если сущность находится в недействительном состоянии?
Я имею в виду, конечно, вы можете использовать валидатор, чтобы проверить, действительна ли сущность (например, до сохранения), но не было бы лучше, если бы просто невозможно было даже находиться в недопустимом состоянии?
class Author
{
/**
* @Assert\NotBlank
*/
public $name;
}
ИМХО не должно быть возможности делать:
$author = new Author();
так как это приводит к недопустимой сущности. Да, вы могли бы это сделать:
class Author
{
/**
* @Assert\NotBlank
* @var string
*/
public $name;
public function __construct( string $name )
{
$this->setName($name);
}
/**
* @param string $name
* @throws \Exception
*/
public function setName(string $name)
{
if ($name ==''){
throw new \Exception('name must be set');
}
$this->name = $name;
}
}
Но тогда для чего нужно это утверждение, верно?
Итак, я что-то здесь упускаю, или это просто так?
Действительное состояние? Что такое действительное состояние? Когда это состояние следует проверять?
В этом случае сущность действительна, только если имя не пустое (@Assert \ NotBlank), нет?
Нет, фактически ПЕРЕД изменением, поскольку от "изменения" следует отказаться, если объект окажется в недопустимом состоянии после изменений.
Итак, как вы собираетесь проверить $author->setName('')? Что, если у вас в сценарии 20 авторов? Что-то должен проверять эти сущности, и, в конце концов, вы не сохраняете их в базе данных. В чем тогда смысл?
Что ж, в моем примере я это делаю, так как перед установкой свойства выполняется проверка, но при этом не используется компонент валидатора Symfony. Так что это можно сделать ..
IMHO не должно иметь значения, сохраняется ли объект или нет, чтобы быть уверенным, что он находится в допустимом состоянии.






О Боже. Я об этом говорил. Жаль, что это был На французском!
Неважно, я полностью с вами согласен и не вижу ничего плохого в том, чтобы генерировать исключения, если ваши входные данные не подходят для объекта.
Кроме того, для меня Doctrine не имеет ограничений на такое использование. Фактически анемические модели были задокументированы в официальной документации Doctrine. Так что да, не очевидно, что Doctrine поддерживает неанемическую модель. Но благодаря отличные участники времена меняются.
Я бы хотел «решить» вашу проблему, но не вижу. Надеюсь, я дал то, что вы ожидали.
чтобы было ясно, это не имеет ничего общего с проверкой формы