There are times when collection-oriented Repositories don't fit well with our persistence mechanism. If you don't have a unit of work, keeping track of Aggregate changes is a difficult task. The only way to persist such changes is by explicitly calling save
.
The interface definition for a persistence-oriented Repository is similar to how you would define a collection-oriented equivalent:
interface PostRepository { public function nextIdentity(); public function postOfId(PostId $anId); public function save(Post $aPost); public function saveAll(array $posts); public function remove(Post $aPost); public function removeAll(array $posts); }
In this case, we now have save and saveAll
methods, which provide functionality similar to the previous add and addAll
methods. However, the important difference is how the client uses them. Within a collection-oriented style, you use the add methods just once: when the Aggregate is created. In...