Я занурююся в дизайн, керований доменом, і деякі концепції, на які я стикаюсь, мають багато сенсу на поверхні, але коли я більше про них замислююся, мені потрібно задуматися, чи справді це гарна ідея.
Наприклад, концепція агрегатів має сенс. Ви створюєте невеликі домени власності, щоб вам не довелося мати справу з усією моделлю домену.
Однак, коли я думаю про це в контексті веб-програми, ми часто потрапляємо в базу даних, щоб повернути невеликі підмножини даних. Наприклад, на сторінці може бути вказано лише кількість замовлень із посиланнями, щоб натиснути, щоб відкрити замовлення та переглянути його ідентифікатори замовлення.
Якщо я розуміння агрегати правильно, я зазвичай використовую шаблон сховища повернути OrderAggregate , який буде містити елементи GetAll
, GetByID
, Delete
і Save
. Гаразд, це звучить добре. Але ...
Якщо я закликаю GetAll перерахувати всі мої замовлення, мені здається, що ця модель вимагає повернення всього списку сукупної інформації, повних замовлень, рядків замовлення тощо ... Коли мені потрібна лише невелика підмножина цієї інформації (лише інформація заголовка).
Я щось пропускаю? Або є якийсь рівень оптимізації, який ви б тут використали? Я не можу уявити, щоб хтось виступав за повернення цілих сукупностей інформації, коли вона вам не потрібна.
Звичайно, можна створити такі способи у вашому сховищі GetOrderHeaders
, але це, здається, перешкоджає використанню шаблону типу сховища в першу чергу.
Хтось може мені це уточнити?
Редагувати:
Після набагато більше досліджень, я думаю, що тут відключення полягає в тому, що чистий шаблон репозиторію відрізняється від того, що більшість людей вважає сховище як таке.
Фаулер визначає сховище як сховище даних, яке використовує семантику колекції, і, як правило, зберігається в пам'яті. Це означає створення цілого графіка об'єкта.
Еванс змінює сховище, щоб включити корінні агрегати, і таким чином сховище ампутується, щоб підтримувати лише об'єкти в агрегаті.
Більшість людей, схоже, вважають сховища прославленими об’єктами доступу до даних, де ви просто створюєте методи для отримання будь-яких даних, які ви хочете. Це, мабуть, не є наміром, як описано у Шаблонах Фаулера архітектури прикладних програм підприємства.
Інші ж вважають сховище простою абстракцією, що використовується в першу чергу для полегшення тестування та глузування або для відключення наполегливості від решти системи.
Я думаю, відповідь полягає в тому, що це набагато складніше поняття, ніж я вперше подумав.