DDD: это единица работы?

Я пытаюсь применить принципы DDD к приложению, созданному на основе Doctrine 2.1. . Чтобы абстрагироваться от деталей хранилища, я использую репозитории для своих совокупных корней с сильным контрактом с доменом. Эти репозитории скрывают все детали реализации и должны быть единственным способом хранения или извлечения агрегатов.

Мне нужно создать класс, который будет единственной точкой входа в хранилище и у которого будут только эти методы:

class X
{
    public function getRepository($className) {}
    public function beginTransaction() {}
    public function rollback() {}
    public function commit() {}
}

Единица работы имеет множество определений, и хотя некоторые считают ее просто способом абстрагировать транзакцию, другие, похоже, считают ее объектом довольно низкого уровня, знающим много деталей об объектах вашей предметной области (определение Фаулера, возможно, ближе к этому).

Итак, является ли мой class X единицей работы или у этого шаблона есть другое название?




Ответы (1)


Да, ваш класс X — это единица работы. Обязанности Unit Of Work обычно реализуются ORM, но я думаю, что есть преимущество в том, чтобы обернуть его в свой собственный класс Unit Of Work. Так что ваш код приложения не имеет ссылки на ORM, что затрудняет обход Unit Of Work и Repositories.

person Dmitry    schedule 13.09.2011