DDD, как и где добавить db таблицу не реализованную в домен? - PullRequest
0 голосов
/ 22 февраля 2019

При попытке создать проект stample с использованием DDD я сталкиваюсь с проблемой:
Для проверки почтового индекса, адреса и т. Д. У меня есть набор таблиц БД (20 таблиц, сотни столбцов, 26Mo), которыеЯ хотел бы сделать запрос.
Эти таблицы не связаны с моим доменом.Эта таблица имеет собственную строку подключения и может храниться вне базы данных персидентности.

Я думал добавить строку подключения к ядру и использовать простой необработанный SQL-запрос orm для проверки данных.Этот процесс легче написать на C #, чем на SQL, поэтому нет хранимой процедуры для выполнения этой работы.

Нет никаких изменений в этих данных.Только запрос.

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Я думаю, что важно помнить, что DDD не должен применяться к всему , что вы делаете.Если у вас есть сложная проблемная область, достойная сложности, которую приносит DDD, это нормально.Однако также хорошо иметь другие области вашего программного обеспечения (по сути, другие границы), которые являются CRUD.На самом деле, CRUD является лучшим, где вы можете сойти с рук из-за простоты.Как сказал @DR, вы можете загружать данные, используя что-то более похожее на Transaction Script (я вижу что-то вроде IZipCodeValidator в вашем будущем) и передавать результаты туда, где они вам нужны, или вы можете подумать, что вашей службе приложений разрешеноиди и получи эти данные ZipCode, используя CRUD (IZipCodeRepository) и передав их полному доменному объекту, который имеет сложные правила для проверки.

Я считаю, что это пуристическое представление DDD, чтобы попытаться избежать передачиметоды в доменных объектах, которые делают вещи (например, DomainObject.ValidateAddress(address, IZipCodeRepository repo)), вместо этого предпочитая передавать значения, полезные для проверки (например, DomainObject.ValidateAddress(address, IEnumerable<ZipCode> zipcodes)).Я думаю, что любой может увидеть там потенциальные проблемы с производительностью, поэтому ваш пробег может отличаться.Я просто скажу сопротивляйся , если сможешь.

0 голосов
/ 22 февраля 2019

Это звучит как отдельный ограниченный контекст.Я, вероятно, запросил бы его из основного домена, используя промежуточный антикоррупционный уровень.Таким образом, ваш домен просто использует интерфейс для службы.Ваш прикладной уровень будет реализовывать этот интерфейс с антикоррупционным уровнем в другом ограниченном контексте.Реализация может использовать простые механизмы запросов к БД, такие как запросы ADO.NET.

...