Flutter: разница между ORM мавра и пола
Итак, я искал несколько ORM для Flutter и нашел двух кандидатов.Moor
а также Floor
.
Похоже, у Moor немного более активный репозиторий, но, поскольку я пришел из мира Android, Floor больше похож на Room, который я любил.
В настоящее время я предпочитаю использовать Floor, но есть ли какие-либо скрытые ошибки, о которых мне следует знать, прежде чем использовать его в производстве?
6 ответов
У меня также есть некоторые сомнения относительно того, что лучше для производственной среды. Похоже, что Moor уже стабильна, протестирована и готова к производству. В FAQ по moor есть хорошее техническое объяснение, в котором сравниваются Moor и Floor, а также другие альтернативы:
Floor также имеет множество удобных функций, таких как автоматическое обновление запросов и миграция схем. Как и в случае с moor, вы определяете структуру своей базы данных в Dart. Затем у вас есть запросы на запись в sql - код сопоставления, если он генерируется полом. У Moor есть похожая функция, но он также может проверять правильность ваших запросов во время компиляции. У Moor также есть api, позволяющий писать некоторые запросы в Dart вместо sql.
Разница между этими двумя классами заключается в том, что Floor позволяет вам писать свои собственные классы и генерирует для этого код отображения. Moor генерирует для вас большинство классов, что может упростить использование, но в некоторых случаях делает api менее гибким.
Я провел несколько тестов, в том числе sqfEntity, концепцию создания строительных лесов для сотрудников, и он делает больше таких вещей, как формы, чем просто сохранение данных. Мне кажется, что Floor более близок к Hibernate, в основном по способу создания Entities, просто сравните их синтаксис Entities, поэтому я нашел его более знакомым и выбрал Floor, несмотря на то, что он еще очень новый.
Также существует Jaguar ORM для Dart: https://github.com/Jaguar-dart/jaguar_orm. Я еще не тестировал JaguarORM, но он единственный, который поддерживает отношения OneToOne, OneToMany и ManyToMany, а также поддерживает другие базы данных.
У Moor есть экспериментальная поддержка в Интернете, посмотрите: https://moor.simonbinder.eu/web/. Несмотря на то, что это экспериментальная функция, если ваше приложение должно быть переносимым в Интернет, вам нужно это рассмотреть. Есть еще одна альтернатива для Интернета: https://github.com/sql-js/sql.js. Дело в том, что очень сложно абстрагировать sqlite в локальное хранилище в браузере. Но по крайней мере, Мур пытается этого добиться.
Если вам просто нужно беспокоиться об android / ios, я порекомендую вам попробовать Floor, в основном потому, что его синтаксис действительно очень хорош.
Насколько я знаю, Флор довольно новый. Даже его документация утверждает, что
Этот пакет все еще находится на ранней стадии, и API, вероятно, изменится.
Это означает, что если пакет будет изменен, вам также придется адаптировать свой код. В то время как Moor более популярен, и вы можете найти несколько хороших руководств. Даже разработчики Google используют его в демонстрационных целях.
Сейчас я использую Floor из-за его простоты. На мой взгляд, другие варианты намного сложнее. Хотя он новый, проблем пока не возникало. Все это основано на простых аннотациях, требует гораздо меньше кода, чем Моор, из того, что я мог прочитать из документации.
Moor поддерживает DateTime, Floor - нет... Floor колебался вокруг того, как это сделать - предоставить преобразователи типов - более года, и мы не могли дождаться, поэтому переписали код нашего репозитория с Floor на Moor.
Я начал реализацию Floor и столкнулся с серьезной проблемой - он не поддерживает DateTime. Конечно, sqlflite изначально не поддерживает DateTime, но кажется, что это довольно необходимый тип данных для обработки. Мур занимается этим полностью за кулисами (хотя я не люблю отказываться от контроля над моделями).