Является ли внедрение хранилища в совокупный корень / сущность плохим проектом?
Я пытаюсь узнать о деталях доменного дизайна, и я пришел к этому вопросу. Я нашел много примеров с:
- Определение интерфейса репозитория в домене
- Определение реализации репозитория где-то еще
- Вставить интерфейс репозитория в совокупный корень
С другой стороны, есть примеры, которые строго идут вразрез с этим и выполняют все связанные с хранилищем вещи из сервиса.
Я не могу найти авторитетного ответа и объяснения: считается ли это плохой практикой и если да, то почему?
1 ответ
Я не могу найти авторитетного ответа и объяснения: считается ли это плохой практикой и если да, то почему?
Да, в основном из-за того, что некоторые разные проблемы перепутаны.
Агрегаты определяют границу согласованности; любое изменение состояния должно быть ограничено набором связанных сущностей, которые являются частью одной совокупности. Таким образом, после того, как вы посмотрели первую ("корневую" сущность), вы сможете достичь изменения без необходимости проверять какие-либо данные, кроме этого графа сущностей домена и переданных вами аргументов.
Перефразируй, Repository
это проблема сантехники, а не доменная проблема. Объекты вашего домена отвечают за выражение вашего домена, без проблем с инфраструктурой.
Например, иметь метод Aggregate.Save(), который будет использовать интерфейс IRepository для сохранения.
Aggregate.Save()
определенно указывает на проблему. Ну, две проблемы, если быть точным: Save
вероятно, не является частью вашего вездесущего языка, и в этом отношении вполне вероятно, что Aggregate
тоже нет
Save
это не проблема домена, это проблема постоянства - он просто копирует данные из вашего представления в памяти (энергозависимое хранилище) в долговременное представление (стабильное хранилище). Ваша модель предметной области не должна знать ничего об этом.
Одна из причин, по которой вы нашли "много примеров", заключается в том, что правильно разделить эти проблемы трудно; Это означает, что вам действительно нужно глубоко задуматься о проблеме, чтобы дразнить их. Большинство примеров этого не делают, потому что дразнить вещи друг от друга не критично, когда вы все разворачиваете вместе.