Я пытаюсь применить принципы DDD к приложению, построенному на основе Doctrine 2.1 . Чтобы абстрагировать детали хранилища, я использую репозитории для моих агрегатных корней с сильным контрактом с доменом. Эти репозитории скрывают все детали реализации и должны быть единственным способом, которым мы можем хранить или извлекать агрегаты.
Мне нужно создать класс, который будет единственной точкой входа в хранилище и который будет иметь только эти методы:
class X
{
public function getRepository($className) {}
public function beginTransaction() {}
public function rollback() {}
public function commit() {}
}
Единица работы имеет много определений, и, хотя некоторые люди думают об этом как о способе абстрагировать вашу транзакцию, другие, похоже, считают ее объектом довольно низкого уровня, зная множество деталей о вашей доменные объекты (определение Фаулера, возможно, ближе к этому).
Итак, мой class X
- это Единица Работы, или у этого шаблона есть другое имя?