Мне здесь непонятно, почему каждый мой класс коллекции должен реализовывать интерфейс Iterator? Это же ведет к дублированию кода. Может быть разумнее создать класс Collection implements Iterator, а затем UserCollection extends Collection ? Или как это делать.
Я думал может нужен гидратор примерно как здесь http://www.slideshare.net/SteveRhoades2 ... -in-php#29 Но ничего не понял. Сущность обычно создают сразу передавая ей в конструктор нужные значения, а здесь получается это делают через сеттеры внутри метода гидратора. В книге ддд квикли писали, что в сущности вообще сеттеров быть не должно. Ну и я погуглил такого паттерна как гидратор не существует, это выдумка зенд фреймворка. И даже если его создать, то непонятно к какому слою он должен относиться, это и не инфраструктура и не домен тоже. Поэтому опять впал в ступор
sda писал(а):Я думал может нужен гидратор примерно как здесь... Но ничего не понял. Сущность обычно создают сразу передавая ей в конструктор нужные значения
class UserRepository implements UserRepositoryInterface {
public function findById($id) {
...
return $this->hydrate($row);
}
public function findAll() {
...
foreach($rows as $row) {
$users[] = $this->hydrate($row);
}
}
private function hydrate($row) {
return new User($row['username'], ...);
}
...
}
Если User нужно будет и в других репозиториях заполнять, то вынесите метод hydrate в класс UserHydrator и вызывайте:
Получается, что если добавится новое свойство у сущности в будущем, то придется сущность вместе с её репозиторием немного изменить, ничего не поделать?
Я читал про specification pattern, но он вроде не о об этом. Где вообще можно нагуглить примеры/статьи как правильно делать? Ничего не получается найти.
Сайт развлекательного характера. Много бизнес-логики. Ничего не получается из-за всего этого хайпа, что сейчас творится в вебе. Особенно во фронтенде. В бекенде ddd где по книжкам все красиво, но когда доходишь до деталей, то ответы в сети найти не получается. С базами непонятно. Одни толком не масштабируются, у других проблемы с транзакциями.