Проблема, з якою я постійно стикаюся, полягає в тому, як боротися з обчислюваними значеннями, керованими логікою домену, при цьому все ще ефективно працюють проти сховища даних.
Приклад:
Повертаю список продуктів зі свого сховища через службу. Цей список обмежений інформацією про пагинацію від DTO запиту, надісланого клієнтом. Крім того, DTO вказує параметр сортування (перелік для клієнта).
У простому сценарії все працює чудово: служба відправляє вирази підкачки та сортування на РЕПО, а репо видає ефективний запит до БД.
Однак все розпадається, коли мені потрібно сортувати значення, створені в пам'яті з моєї моделі домену. Наприклад, у класі Product є метод IsExpired (), який повертає bool на основі бізнес-логіки. Тепер я не можу сортувати та розміщувати сторінки на рівні репо - це все було б зроблено в пам'яті (неефективно), і моя служба повинна знати тонкощі, коли видавати ці параметри репо і коли виконувати сортування / пейджінг себе.
Єдиний зразок, який, здається, має сенс для мене, - це зберігати стан сутності у db (зробити IsExpired () полем для читання та оновлювати його за допомогою логіки домену перед збереженням). Якщо я розділяю цю логіку на окремий сховище "читати модель / dto" та "звітування", я роблю свою модель більш анемічною, ніж мені хотілося б.
До речі, кожен приклад, який я бачив там для таких обчислень, схоже, справді спирається на обробку пам’яті та наближення до того факту, що в довгостроковій перспективі це набагато менш ефективно. Можливо, я передчасно оптимізую, але це просто не відповідає мені.
Я хотів би почути, як інші впоралися з цим, оскільки я впевнений, що це часто зустрічається в майже проекті, що включає DDD.