Проектирование на основе домена - API внешних данных как репозиторий или сервис - PullRequest
7 голосов
/ 16 февраля 2010

В приложении блога, разработанном с использованием доменного дизайна, сущность 'Post' имеет связанную коллекцию сущностей тегов.

При создании сообщения (например, заполнение объекта из пользовательского интерфейса) я хотел бы вызвать сторонний API через REST, который принимает содержимое сообщения и извлекает семантические теги ( текст ссылки ) для ассоциации .

Главный вопрос : Как лучше всего спроектировать это ...

Лучше ли он спроектирован так, чтобы сущность Post вызывала доменную службу, такую ​​как PostServices.GetTags (Postcontent), передавая свое содержимое и получая обратно список тегов .?

** PostServices.GetTags будет затем взаимодействовать с REST API через дополнительный класс-оболочку.

Или сторонний API должен быть упакован как репозиторий?

Должна ли функция Post.GenerateTags () вообще не существовать в доменном объекте?

Дополнительные вопросы :

1: Я также читал, что не рекомендуется, чтобы объект домена общался с услугой домена. Это правда?

2: Можно ли получить ссылку на службу домена PostServices с помощью метода создания фабрики. например ...

IPostService PostService = ServiceUtil.GetPostService (); return PostService.GetTags (Post.content);

3: Допустимо ли подключение доменной службы к API стороннего поставщика?

4: Должен ли объект домена просто знать, как обращаться с тегами, полученными через прикладной уровень, который называется REST API.

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

1 Ответ

3 голосов
/ 16 февраля 2010

В приложении блога Post - это сущность, а Tag - это объект-значение. Тег не имеет идентичности. Вы должны иметь:

  • PostsRepository
  • Post (Entity)
  • Tag (объект значения)

В сообщении есть список тегов.

Вопросы:

1: Я также читал, что не рекомендуется, чтобы объект домена общался с услугой домена. Это правда?

Да, это не очень хорошая практика. Ваша сущность не хочет быть связанной с доменной службой. Если вы сделаете это, вы не сможете использовать их позже. Рассматривали ли вы, чтобы запустить событие домена. Вы можете указать домену своей службы, что-то сделать, чтобы он запускал события домена.

2. : Это нормально, чтобы получить ссылку на службу домена PostServices с помощью метода создания фабрики. например, IPostService PostService = ServiceUtil.GetPostService (); return PostService.GetTags (Post.content);

Да, это возможно. Фабричный метод может возвращать абстрактный класс или интерфейс. Это хороший принцип разработки программного обеспечения «код для интерфейса, а не для реализации». Если вы сделаете это, вы сможете изменить свою реализацию позже, и вам не придется менять свой клиентский код.

3: Допустимо ли подключение доменной службы к API стороннего поставщика?

Я не рекомендую вам это, но это приемлемо.

Извините, я не понимаю вопроса 4.

Посмотри эту ссылку. Я надеюсь, что это поможет вам.

/669431/ddd-gde-luchshe-vsego-poluchit-spisok-obektov-znachenii#669435

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...