You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Требуется возможность определять сервис данных, через которого производится запрос в БД, на основании типа данных обрабатываемого объекта.
Функциональные требования
При выполнении Post и Patch запросов производится загрузка мастеровых объектов в глубину с использованием сервиса данных, который был указан в конструкторе сервиса данных.
Данная возможность частично может быть реализована через кастомную реализацию IHttpControllerActivator, с помощью разбора можно запроса можно получить тип данных, например, для чтения объектов подсистемы полномочий, если она расположена в другой БД.
В общем случае такой сценарий вполне адекватен, однако, если в БД используются foreign table, а данные в них вытягиваются через fdw, то оптимальнее будет напрямую обращаться к целевой БД, минуя fdw.
Требования к реализации
Для реализации данной возможности необходимо:
добавить в DataObjectController виртуальный метод IDataService GetDataService(Type), который будет возвращать экземпляр сервиса данных в зависимости от использованного конструктора: return _dataService;
все обращения к приватному полю _dataService заменить на метод GetDataService.
Опционально (т.к. будет достаточно для переопределения на прикладном проекте):
изменить тело метода GetDataService на: return _dataService ?? _factory.Create(type);
выделить интерфейс IDataServiceFactory с один методом IDataService Create(Type)
добавить новый конструктор для DataObjectController: public DataObjectController(IDataServiceFactory, DataObjectCache, DataObjectEdmModel ,IEventHandlerContainer, IFunctionContainer)
существующий конструктор пометить атрибутом [InjectionConstructor] для обратной совместимости
Тесты
Текущие тесты должны работать, добавить несколько тестов с использованием созданного конструктора.
Цель
Требуется возможность определять сервис данных, через которого производится запрос в БД, на основании типа данных обрабатываемого объекта.
Функциональные требования
При выполнении Post и Patch запросов производится загрузка мастеровых объектов в глубину с использованием сервиса данных, который был указан в конструкторе сервиса данных.
Данная возможность частично может быть реализована через кастомную реализацию
IHttpControllerActivator
, с помощью разбора можно запроса можно получить тип данных, например, для чтения объектов подсистемы полномочий, если она расположена в другой БД.В общем случае такой сценарий вполне адекватен, однако, если в БД используются
foreign table
, а данные в них вытягиваются через fdw, то оптимальнее будет напрямую обращаться к целевой БД, минуя fdw.Требования к реализации
Для реализации данной возможности необходимо:
DataObjectController
виртуальный методIDataService GetDataService(Type)
, который будет возвращать экземпляр сервиса данных в зависимости от использованного конструктора:return _dataService;
_dataService
заменить на метод GetDataService.Опционально (т.к. будет достаточно для переопределения на прикладном проекте):
GetDataService
на:return _dataService ?? _factory.Create(type);
IDataService Create(Type)
DataObjectController
:public DataObjectController(IDataServiceFactory, DataObjectCache, DataObjectEdmModel ,IEventHandlerContainer, IFunctionContainer)
[InjectionConstructor]
для обратной совместимостиТесты
Текущие тесты должны работать, добавить несколько тестов с использованием созданного конструктора.
Аналоги, примеры реализации
The text was updated successfully, but these errors were encountered: