Дизайн кода: как обработать оформленный объект домена из репозитория в ответ API - PullRequest
0 голосов
/ 30 января 2020

Как вы управляете составным объектом, который отображается из результатов базы данных? У нас есть объект домена, который нуждается в дополнительной информации перед отправкой клиенту. Вычисление дополнительных полей выполняется на уровне базы данных, поэтому мы отображаем результат на выделенный объект (оформленный), который имеет собственный репозиторий. Проблема в том, что наш контроллер API или responseFactory теперь получает инъекцию DomainObjectRepository и DecoratedObjectRepository ... Есть ли лучший способ, как это сделать?

Контекст

Мы предоставляем API для нашего клиента, который возвращает информацию о компании.

Нашим клиентам нужна конечная точка, которая ищет компании по их названию.

Ответ должен:

  • возвращать коллекцию, которая содержит украшенные фирменные элементы, которые соответствуют, а также не соответствуют запросу, как указано ниже.
    • данные домена компании (имя, адрес, описание, изображение)
    • флаг Similar_to_search, который указывает, совпадает он или нет
  • сортировать по подобие поиска
  • быть разбитым на страницы

Как мы это делаем:

Мы используем функцию «Similar», предоставленную postgres, для поиска и сортировки столбец имени.

Выделенный репозиторий в пакете постоянства возвращает список оформленных компаний и разбитую на страницы информацию в CompanyResponseFactory.

Фабрика предоставит ответ companyController нашего API.

Структура нашего пакета выглядит следующим образом:

  • API-пакет
    • CompanyController
    • CompanyResponseFactory (CompanyRespository, ContactRepository)
    • CompanyResponse
  • Доменный пакет
    • Company
  • Постоянный пакет
    • CompanyRepository
    • DecoratedCompanyRepository
    • DecoratedCompany

Проблема с нашей реализацией:

  • Каждый новый тип ответа, который вычисляется не на заводе, а в для данных потребуется специальный репозиторий или у нас есть репозитории, которые возвращают различные типы объектов.
...