DDD - Ответственность за создание и валидацию сущностей

В последние дни меня интересует DDD (Domain Driven Design), но я не могу понять, каковы обязанности тех, кто создает и проверяет объекты. Я разобью эти вопросы, чтобы охватить разные сценарии.

  1. Обычный объект (возможно, с объектом значения). В качестве примера возьмем пользователя, идентифицированного по электронной почте. У меня есть UserFactory, который получает массив данных (возможно, из формы POST) и возвращает мне новый UserEntity. Должна ли фабрика проверять целостность данных (например, строка, указанная как Электронная почта, является настоящим адресом электронной почты, пароли в поле пароля 1 и поле 2 совпадают и т. Д.)? Должен ли завод подтверждать, что такого пользователя уже не существует (мы не хотим регистрировать двух пользователей с одним и тем же адресом электронной почты)? Если да, должен ли он делать это сам или с помощью UserRepository?

  2. Агрегатная сущность. Предположим, у нас есть сущность Post и сущности Comments. Я хочу получить пост 12 со всеми его комментариями, поэтому я делаю что-то вроде

    $ post = $ postRepository-> getById (12);

Как следует реализовать getById? вроде этого:

public function getById($id) {
    $postData = $this->magicFetchFromDB($id);
    $comments = (new CommentRepository())->getForPost(12);
    return new PostEntity($postData, $comments);
}

Или, может быть, сообщение, ответственное за ленивое создание своих комментариев, например:

class PostEntity {
    public function getComments() {
        if(is_null($this->_comments)) $this->_comments = (new CommentRepository())->getForPost($this->_id);
        return $this->_comments;
    }
}

? Я очень потерялся здесь, и здесь недостаточно информации с примерами DDD в PHP, поэтому любая помощь будет принята с благодарностью!

Большое спасибо, скви.

5
задан Dmitry Kudryavtsev 6 February 2012 в 14:41
поделиться