Читал в сети разные виды реализаций этого паттерна. На php видел только одну, в Doctrine 2.
И как-то у меня нет полного понимания какие задачи он решает, например псевдокод:
$unitOfWork = new UnitOfWork(function() use(...) {
$userRepository = new UserRepository();
$roleRepository = new RoleRepository();
$user = $userRepository->create(array());
$roleRepository->add($user, 'admin');
});
$unitOfWork->commit();
В таком виде, UoW - инкапсулирует в себе транзакцию. Паттерн Repository - инкапсулирует логику работы с хранилищем. И вот тут у меня полное непонимание. Если вдруг $userRepository начинает оперировать с нереляционным хранилищем. Каким образом UoW разрулит этот конфликт? Или, например, $userRepository - запись ведет по одному соединению, а чтение по другому ? .....
Да и в целом, те же репозитории могут пробрасываться через IoC, при смене хранилища.
Объясните, пожалуйста, какие задачи и как их должен решать UoW ? ( например, если проект наглухо не завязан на одном хранилище )