В этой небольшой статье я бы хотел рассказать, почему был создан этот проект и какие цели он преследует.
Основная идея, которую я вынес во время работы фронтенд-разработчиком, звучи так: твоё приложение – это не твои фреймворк/библиотека. Естественно, какие-то детали будут зависеть от того, что вы используете (React/Vue/etc), но, в целом, будет идеально, если всё, что связано с отображением данных – всего лишь отдельный слой вашего приложения, который можно заменить.
Естественно, было бы здорово, если бы это можно было сделать так же легко, как поменять лампочку. Однако, в р еальном мире это практически невозможно. Но мы можем облегчить себе путь гипотетической смены инструмента отображения.
Конечно, такая потребность возникает нечасто. В моей практике был всего лишь один случай, когда пришлось менять одну библиотеку на другую. Но всё это можно перенести, скажем, на обновление мажорной версии фреймворка или библиотеки – как, например, произошло после выхода Vue 3.
Чтобы достичь этого "облегчения", приложение должно уметь работать без "лица", то есть, как бы в "консольном" режиме. Естественно, не должно быть CLI, но интерфейс должен лишь дёргать рычаги, а работа должна происходить где-то в другой стороне.
Для этого, как мне кажется, нужно относиться к своему приложению не как к web-приложению, а как к обычной программе, у которой есть слои данных и сервисов, хранилище для этих данных, и что- то, что занимается отрисовкой интерфейса. Для Vue.js я нашёл пакет Vuex ORM, который далее развился в Vuex ORM Next. Поначалу, естественно, было сложно привыкнуть, что отныне у тебя нет свободы крутить-вертеть данными так, как хочется. Однако, очень быстро я понял, насколько всё получается структурированно и аккуратно, когда всё начинает строиться вокруг домена и моделей.
Лишь одно меня беспокоило. Допустим, сейчас я разрабатываю приложения для Web с помощью Vue, и следую описанному выше принципу. И вдруг, через время, я захочу сделать мобильное приложение на React Native. Получается ситуация, в которой у меня уже есть готовые слои данных и сервисов, но я не могу их использовать: они слишком завязаны на Vue и Vuex. Очень хотелось бы иметь аналог Vuex ORM, но для React, или Svelte, или чего угодно ещё.
Так и появилась идея Rattus ORM. По задумке теперь можно получить опыт использования ORM в любом приложении, и без особого труда. Всё, что нужно - написать Data provider и подумать, как обращаться к хранилищу в компонентах. В результате срок миграции на другую платформу существенно сокращается.
На текущий момент разработка на очень раннем этапе. Я всегда приветствую issues и пулл-реквесты.
До новых встреч!