Репозиторий или ServiceAgent в DDD - PullRequest
0 голосов
/ 10 февраля 2011

У меня есть система, которая общается с базой данных, используя репозитории. Каково правильное определение, когда это удаленный сервис? Или лучше,

Репозиторий предназначен для баз данных, а [...] для внешних веб-служб.

Я нашел во многих местах сведения об агентах ServiceAgent, но не знаю, правильное ли это определение.

Ответы [ 3 ]

1 голос
/ 30 августа 2012

В DDD репозитории представляют собой виртуальную коллекцию сущностей (в частности, агрегированные корни). Таким образом, если у вас есть 10M постоянных клиентов, вы будете работать с репозиторием , как если бы это был набор всех 10M в памяти. Хранилища, как правило, работают только с теми же типами операций, которые можно найти в коллекции: добавить что-либо, удалить что-либо, найти что-то в коллекции.

Если фактическое сохранение данных происходит через веб-службу, реализация хранилища может взаимодействовать с прокси-сервером веб-службы, а не с базой данных. Однако тот факт, что постоянство включает в себя веб-службу, не влияет на то, как это должно выражаться вашим доменом. То есть, сохраняются ли данные с помощью прямых вызовов базы данных, ORM, веб-службы или почтового голубя.

Теперь, если ваша модель домена имеет зависимости, которые должны поддерживаться внешними службами (например, проверка кредитной карты, проверка адреса и т. Д.), Это должно быть выражено как служба домена в форме интерфейса, который определяет необходимые операции с точки зрения доменной модели . Чтобы быть ясным, доменные службы - это операции, которые логически являются частью вашего домена, но по той или иной причине не подходят точно для данного объекта или объекта значения. Поведение, поддерживаемое внешней службой, является лишь одним примером того, когда вы можете использовать доменную службу, поэтому не думайте о доменных службах как о «шаблоне хранилища для веб-служб» или о чем-то подобном.

0 голосов
/ 21 марта 2011

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

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

Если у кого-то есть какие-либо возражения, то, пожалуйста, прокомментируйте, поскольку я хотел бы знать, если я сам неправильно понимаю предполагаемое использование репозиториев.

0 голосов
/ 12 февраля 2011

Не уверен, что это официальный термин, но я бы назвал его «Сервисный прокси».

...