Проектирование на основе домена - API внешних данных как репозиторий или сервис

В приложении блога, разработанном с использованием доменного дизайна, сущность '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 ответ

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

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

Сообщение имеет список тегов.

Вопросы:

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

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

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

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

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

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

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

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

/questions/48038617/ddd-gde-luchshe-vsego-poluchit-spisok-obektov-znachenij

Другие вопросы по тегам