Существует ли общий шаблон проектирования по этой теме или рекомендациям?
Одна из распространенных практик - избегать изменения сущностей, хранящихся в разных местах в одной и той же транзакции. Один из способов гарантировать, что вы этого никогда не сделаете, - это активировать только одну сущность в любой транзакции.
Таким образом, у нас может быть разумный объект entityA и копия необходимой нам информации от B. Или у нас может быть entityB и копия необходимой нам информации от A.
Для случаев использования, когда мы не меняем ни одну из сущностей, мы можем просто использовать копии данных.
В случае, когда мы используем entityA
и recent-copy-of-B
, мы знаем, что entityA происходит из репозитория. Откуда взялся recent-copy-of-B
? Ну, это происходит из абстракции, которая выглядит как хранилище, за исключением того, что (а) она выбирает значения, а не сущности, и (б) она только для чтения.
recent-copy-of-B
выглядит как DTO. И хотя вы можете использовать один и тот же файл везде, на самом деле безопасно (поскольку значения неизменны) создавать специализированные версии для разных вариантов использования.