Шаблон проектирования «Единица работы», по крайней мере, как определено Фаулером в Шаблоны архитектуры корпоративных приложений - это деталь реализации, относящаяся к объектному реляционному постоянному отображению.Это не сущность, определенная в Domain Driven Design .
Эванса. Таким образом, она не должна быть ни частью бизнес-дискуссии, ни сущностью, которая напрямую представлена в модели предметной области - возможно,исключая метод commit()
.Вместо этого его целью является отслеживание «чистых» и «грязных» бизнес-объектов - объектов из доменной модели, предоставляемых клиентам.Цель состоит в том, чтобы разрешить множественные взаимодействия - в запросах веб-контекста - с моделью предметной области без необходимости каждый раз читать и записывать с постоянства (обычно это база данных).
Бизнес-объекты вызывают его при вызове их методов.Когда их состояние изменяется, они регистрируют себя как грязные с Единицей Работы.Затем commit()
единицы работы обрабатывает всю постоянную транзакцию в терминах выписывания графа объектов, а rollback()
означает восстановление состояния сущностей до того, чем они были.Так что его реализация в значительной степени просачивается в «абстракцию», но ее цель очень ясна.
С другой стороны, «Отменить» и «Завершить» не обязательно отображать один в один с этим определением.«Отменить» или «Очистить» может откатывать только граф объекта, например, в зависимости от бизнес-контекста.Хотя «Complete» вполне может изменить состояние некоторой сущности, а также зафиксировать граф.Таким образом, я бы поставил эти методы в деловом смысле на объекте уровня обслуживания или агрегированного корня.