Re: Взаимодействие фабрики и репозитори объектов
От: bl-blx Россия http://yegodm.blogspot.com
Дата: 07.08.14 09:59
Оценка:
Здравствуйте, Strategy, Вы писали:

S>Вариант 1:

S>Добавить в репозитори метод создания объекта, который запрашивает новый объект в фабрике и добавляет созданный объект в репозитори
S>
S>'репозитори использует фабрику для создания объекта
S>dim NewObject = Repository.CreateObject
S>

S>Вариант 2:
S>Перенести добавление созданного объекта в репозитори внутрь фабрики.
S>
S>'фабрика возвращает новый объект уже добавленный в репозитори
S>dim NewObject = Factory.CreateObject
S>


Если четко обозначить ответственности, то:
— Фабрика создаёт представление объекта в памяти
— Репозиторий принимает объект для управления его жизненным циклом, и, что важно,
проверяет валидность его состояния при добавлении и обновлении;
Вариант 2 выглядит нелогичным из-за того, что
(1) добавление объекта в Репозиторий внутри Фабрики — это, фактически, сайд-эффект;
(2) Фабрика вынуждена знать о Репозитории, хотя создание объекта может и не предполагать
помещение его в Репозиторий;
(3) операция может завершиться исключением из-за невалидного состояния объекта;

Насколько вообще важна Фабрика в данном случае? Если она просто создаёт пустой объект,
то с этим и Репозиторий вполне справится внутри, например, Repository.CreateObject.

Вообще, этот сценарий не совсем очевиден:
S>1. Запрос создания фабрикой нового объекта
S>2. Добавление созданного объекта в репозитори

S>
S>dim NewObject = Factory.CreateObject
S>Repository.Add(NewObject)

S>'дальше модифицируются свойства объекта
S>

Означает ли это, что добавляется всегда пустой объект, затем ему задаются свойства?
По идее, правильный порядок действий таков:
— создать пустой объект
— задать свойства
— отдать в Репозиторий
Такой подход позволяет сделать Репозиторий ответственным за валидацию
как в случае добавления, так и в случае обновления.
El pueblo unido jamás será vencido.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.