class PostRepository{
private $_posts = array();
public function store() {
foreach($this->_posts as $post) {
if($post->isDirty()) {
$this->_storeImpl($post);
}
}
public function findByPrimaryKey($key) {
if(array_key_exists($key, $this->_posts) return $this->_posts[$key];
$this->_posts[$key] = $this->_loadImpl($key);
return $this->_posts[$key];
}
}
}
=========
class PostEntity {
private $_isDirty = false;
public function setTitle($title) {
...
$this->_isDirty = true;
}
}
class UserEntity {
public function getPosts() {
return $this->_posts;
}
}
=======
class UserRepository {
public function store(UserEntity $user) {
$posts = $user->getPosts();
$postRepo = new PostsRepository();
$postRepo->storeMany($posts);
if($user->wasModified()) {
$this->_storeImpl($user);
}
}
}
а референсы будет держать токо репоситориAggregate: A collection of objects that are bound together by a root entity, otherwise known as an aggregate root. The aggregate root guarantees the consistency of changes being made within the aggregate by forbidding external objects from holding references to its members.
По-моему как раз наоборот. Юзер должен оставаться тем же юзером даже после смены емейла. Как раз id и делает его сущностью, обеспечивает его продолжительность существования независимо от атрибутов.Проектируя систему ДДД не думайте в понятиях базы данных! Это не првильно. Пример:
Логично что Identity User-а это ID из БД, но потом я подумал как реализовать User::factory(...) он не создает запись в БД, а просто делает new User(..); но у каждого энтити должен быт Identity, а как мне знать АйДи если я не пишу в БД?! Так вот дорогие мои, Identity User-а это не АйДи из БД, а email в моем случаее, АйДи в БД это просто для удобства связи и быстрого поиска. Вот так вот.
А что ему мешает остатся тем же юзером?Юзер должен оставаться тем же юзером даже после смены емейла.
Если юзер - это вещь в себе, и никак не привязан к остальным элементам модели, то тогда ему не нужен id, Если же по юзеру будет вестись статистика или он будет привязан к еще к 100500 объектам, emailом тут не обойдешься - и в том же xml или mongo будешь хранить его id. Независимо от реализации хранилища.varan
Если завтра ты поменяеш mysql на mongodb или xml файлы твоя модел не должна менятся.