Снимок модели предметной области для сопоставления и восстановления с использованием Factory

Я прочитал в Patterns, Principles and Practices of DDD книга, в которой, если вы хотите полностью инкапсулировать модель предметной области, вы можете сделать ее свойства приватными и использовать шаблон Memento. читать их. Был также пример, когда репозиторий получает моментальный снимок модели предметной области, затем сопоставляется с моделью базы данных и сохраняет свои изменения в БД. Также он извлекает модель базы данных из db, сопоставляет ее со снимком, а затем использует шаблон Factory для воссоздания модели домена из снимка и работы с ней.

  1. Я немного смущен тем, как много работы здесь делается, когда вы можете просто сопоставить модель базы данных с моделью предметной области, не используя фабрику или моментальные снимки. Разве это не намного проще?
  2. Если мы собираемся следовать книге, правильный ли это способ вернуть моментальный снимок модели предметной области из сервисного уровня в уровень представления, а затем сопоставить его с моделью представления? Или создать моментальный снимок на уровне представления и передать его на сервисный уровень, используя шаблон фабрики, чтобы воссоздать его там, а затем передать модель предметной области в репозиторий, где он снова сделает свой снимок для сопоставления с моделью базы данных и сохранит в дб....

  3. Можете ли вы привести пример, когда вам нужно использовать такую ​​сложную архитектуру сопоставления?

Это действительно похоже на то, что вы пишете сложный код, когда его можно сделать намного проще.

ОБНОВЛЕНИЕ

Я могу привести примеры кода, если будет легче понять, что я прошу. ;)


person QuietNaN    schedule 15.08.2016    source источник


Ответы (1)


  1. Задача репозитория состоит только в том, чтобы сохранять и восстанавливать объекты домена из постоянного хранилища. Любой шаблон проектирования, выходящий за рамки этого, является просто техническими деталями, обычно это способ обойти недостатки ORM, но он не является частью репозитория (то есть основного средства хранения DDD) как такового.

    Я предполагаю, что шаблон Memento в этой книге используется для разрешения конфликта ORM/инкапсуляции, т. е. ORM требуется доступ для записи ко всем полям объекта, чтобы иметь возможность повторно гидратировать его, что вынуждает вас раскрывать их и нарушает инкапсуляцию.

  2. Нет, Memento или Snapshot предназначены только для хранения. Слой службы (или приложения) сопоставляется с реальными сущностями или использует предварительно вычисленные модели для чтения, если вы находитесь под CQRS.

person guillaume31    schedule 16.08.2016