Как вы управляете составным объектом, который отображается из результатов базы данных? У нас есть объект домена, который нуждается в дополнительной информации перед отправкой клиенту. Вычисление дополнительных полей выполняется на уровне базы данных, поэтому мы отображаем результат на выделенный объект (оформленный), который имеет собственный репозиторий. Проблема в том, что наш контроллер API или responseFactory теперь получает инъекцию DomainObjectRepository и DecoratedObjectRepository ... Есть ли лучший способ, как это сделать?
Контекст
Мы предоставляем API для нашего клиента, который возвращает информацию о компании.
Нашим клиентам нужна конечная точка, которая ищет компании по их названию.
Ответ должен:
- возвращать коллекцию, которая содержит украшенные фирменные элементы, которые соответствуют, а также не соответствуют запросу, как указано ниже.
- данные домена компании (имя, адрес, описание, изображение)
- флаг Similar_to_search, который указывает, совпадает он или нет
- сортировать по подобие поиска
- быть разбитым на страницы
Как мы это делаем:
Мы используем функцию «Similar», предоставленную postgres, для поиска и сортировки столбец имени.
Выделенный репозиторий в пакете постоянства возвращает список оформленных компаний и разбитую на страницы информацию в CompanyResponseFactory.
Фабрика предоставит ответ companyController нашего API.
Структура нашего пакета выглядит следующим образом:
- API-пакет
- CompanyController
- CompanyResponseFactory (CompanyRespository, ContactRepository)
- CompanyResponse
- Доменный пакет
- Постоянный пакет
- CompanyRepository
- DecoratedCompanyRepository
- DecoratedCompany
Проблема с нашей реализацией:
- Каждый новый тип ответа, который вычисляется не на заводе, а в для данных потребуется специальный репозиторий или у нас есть репозитории, которые возвращают различные типы объектов.