Транспортировка объектов ActiveRecord в типы TypeScript для немоно-хранилища - PullRequest
1 голос
/ 06 марта 2020

Я недавно начал разработку довольно крупного мобильного приложения (React Native), которое потребляет Ruby в Rails API (в режиме API).

На внешнем интерфейсе я имею широко использовал TypeScript во всем коде, но у меня возникли проблемы с подходом к созданию типов и интерфейсов для данных, полученных через запросы API. Я слышал о преобразовании C# моделей баз данных в типы TypeScript - но я не могу найти ничего подобного для Ruby в Rails. Единственное, что мне удалось найти, - это как обрабатывать типы в моно-репо, где и внешний, и внутренний интерфейсы находятся в одном репозитории.

Я мог бы создавать свои типы вручную на внешнем интерфейсе, но я чувствую, что это не будет устойчивым в долгосрочной перспективе, особенно когда к проекту присоединяются новые разработчики.

Есть ли для этого какие-либо жемчужины или мне придется написать это самому? Я неправильно подхожу к вопросу?

1 Ответ

1 голос
/ 06 марта 2020

Я мог бы создавать свои типы вручную на внешнем интерфейсе

Это, пожалуй, лучший выбор, поскольку он поощряет разделение между внешним интерфейсом и бэкэнд-приложением API. Идея автоматической генерации кода переднего плана на основе вашей базы данных звучит хорошо в теории, но ваш интерфейс не общается напрямую с БД - он общается с вашим API и не должен знать о базовом хранилище данных, которое является деталью реализации API.

Это также причина, по которой вы видите эту попытку только в монорепо - она ​​требует жесткой связи, что очень нежелательно. Если внутренняя схема изменится, это сломает клиентов - что не произойдет, если они просто обмениваются данными через версионный API. Пока API остается согласованным, клиенты в значительной степени изолированы от изменений в бэкэнде и могут происходить в тандеме.

Также необходимо учитывать, что ActiveRecord чрезвычайно динамичен c по сравнению с все, что написано в C# и большинстве других фреймворков. Атрибуты модели автоматически определяются во время выполнения, читая схему непосредственно из базы данных - все это метапрограммирование на уровне супервинции. Таким образом, вы не можете использовать любую форму анализа stati c для создания исходного кода из одного только внутреннего кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...