Проектирование на основе домена - 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