Преобразование / перевод между уровнем API и уровнем персистентности - PullRequest
0 голосов
/ 03 марта 2020

Я работаю над созданием простого бэкэнд-сервиса для побочного проекта, и мне любопытно, каковы лучшие практики для преобразования между схемой данных "внутренняя / БД" и схемой данных, обращенной к API. Для контекста я планирую использовать grp c - go (с protobuf) для сервиса и GORM.

Допустим, кто-то отправляет запрос на создание пользователя, и я инициализирую структуру User, которая содержит всю необходимую информацию. «Пользователь», который я предоставляю GORM, должен быть немного изменен, чтобы соответствовать требованиям GORM. Например, GORM имеет gorm.Model, который может быть добавлен к любой структуре, чтобы дать ему ID поля, время создания и т. Д. c. Это означает, что мне нужно выполнить некоторый перевод между уровнем API и уровнем персистентности, чтобы использовать ORM для хранения информации в БД. Аналогичным образом, при извлечении из БД для отправки ответа мне нужно выполнить какой-то перевод, чтобы заставить сущность соответствовать формату, требуемому для моих протосов API.

Это означало бы, что мне нужно написать двусторонний перевод функции для многих объектов, большинство из которых не будет делать так много. Это кажется довольно неэффективным / заставляет меня чувствовать, что я подхожу к этому неправильному пути.

Каковы некоторые подходящие способы / лучшие практики для определения такого вида взаимодействия между уровнем API / конечной точкой и уровнем персистентности / ORM ? Я знаю, что protoc-gen-gorm существует, но мне интересно, есть ли более обобщенное решение / набор лучших практик для решения этой проблемы.

...