Основной принцип заключается в том, что ядро DDD не должно ничего знать о JDBC, TCP или ORM.Все, что он знает, должно быть выражено в виде вездесущего языка.
Но это не значит, что он не должен знать, что изменилось.Вы можете использовать сортировку событий и сохранять события в AR, из которых могут быть получены необходимые обновления.
Возможно, это не слишком объектно-ориентировано, но вы можете попробовать.По сути, AR можно представить как лицо, принимающее решения, которое получает запросы на изменение своего состояния, решает, принимать ли эти запросы или отклонять, а затем сохраняет список событий, изменяющих состояние.
Затем необходимо уменьшитьэтот список событий где-то для модели чтения, но это не входит в обязанности AR, если вы используете этот подход.
Когда я упоминаю принятие решения, я имею в виду чистую функцию, которая не идет на диск илисеть для данных.Это означает, что все необходимые данные должны быть собраны до принятия решения, а затем сохранены.Это относится к прикладному уровню.
И этот прикладной уровень - это тот, кто взаимодействует с репозиториями или сетевыми адаптерами.Он также может обрабатывать транзакции и так далее.Далее, вычисление SQL-запроса UPDATE является подробностью реализации репозитория.Но до тех пор, пока изменения состояния выражаются в виде вездесущего языка, оно может быть хорошо известно агрегатам и ядру домена.