Как реализовать шаблон репозитория DDD, используя сырой JDBC или Mybatis? - PullRequest
0 голосов
/ 24 апреля 2019

скажем, у меня есть сложный совокупный корень (AR)

в пользовательской транзакции, я умножаю это AR:

ar.doSomeThing1();
ar.doSomething2();
ar.doSomething3();
ar.doSomething4();

тогда я использую хранилище, чтобы сохранить все изменения

arRepo.update(ar)

Мой вопрос: как реализовать arRepo.update использовать строку JDBC или Mybatis?

Основная сложность:

  1. arRepo не знает, что изменилось, единственный способ - обновить все данные ar в базе данных.

1 Ответ

2 голосов
/ 24 апреля 2019

Основной принцип заключается в том, что ядро ​​DDD не должно ничего знать о JDBC, TCP или ORM.Все, что он знает, должно быть выражено в виде вездесущего языка.

Но это не значит, что он не должен знать, что изменилось.Вы можете использовать сортировку событий и сохранять события в AR, из которых могут быть получены необходимые обновления.

Возможно, это не слишком объектно-ориентировано, но вы можете попробовать.По сути, AR можно представить как лицо, принимающее решения, которое получает запросы на изменение своего состояния, решает, принимать ли эти запросы или отклонять, а затем сохраняет список событий, изменяющих состояние.

Затем необходимо уменьшитьэтот список событий где-то для модели чтения, но это не входит в обязанности AR, если вы используете этот подход.

Когда я упоминаю принятие решения, я имею в виду чистую функцию, которая не идет на диск илисеть для данных.Это означает, что все необходимые данные должны быть собраны до принятия решения, а затем сохранены.Это относится к прикладному уровню.

И этот прикладной уровень - это тот, кто взаимодействует с репозиториями или сетевыми адаптерами.Он также может обрабатывать транзакции и так далее.Далее, вычисление SQL-запроса UPDATE является подробностью реализации репозитория.Но до тех пор, пока изменения состояния выражаются в виде вездесущего языка, оно может быть хорошо известно агрегатам и ядру домена.

...