7

所以我一直在为 Flutter 寻找一些 ORM,我找到了两个候选者MoorFloor.

似乎Moor 有更活跃的存储库,但由于我来自 Android 世界,Floor 似乎更类似于 我曾经喜欢的 Room 。

目前,我赞成使用 Floor ,但在生产中使用它之前是否应该注意任何隐藏的陷阱?

4

6 回答 6

7

我也有一些疑问,哪个最适合生产环境。似乎 Moor 已经稳定并经过实战测试和生产准备就绪。moor FAQ 中有一个很好的技术解释,比较 Moor 和 Floor 以及其他替代方案:

Floor 还具有许多便利功能,例如自动更新查询和模式迁移。与 moor 类似,您在 Dart 中定义数据库的结构。然后,您已经在 sql 中编写查询 - 如果由 floor 生成,则映射代码。Moor 具有类似的功能,但它还可以验证您的查询在编译时是否有效。Moor 还有一个 api,可以让你用 Dart 而不是 sql 编写一些查询。

这两者之间的区别在于 Floor 让您编写自己的类并围绕它生成映射代码。Moor 为您生成了大多数类,这可以使其更易于使用,但在某些情况下会降低 api 的灵活性。

我已经进行了一些测试,包括 sqfEntity,它是员工脚手架概念的一部分,它可以做更多的事情,比如表单,而不仅仅是数据持久性。对我来说,Floor 似乎更接近 Hibernate,主要是在创建实体的方式上,只是在它们的 Entities sintaxe 之间进行比较,因此我发现它更熟悉并选择了 Floor,尽管它还很新。

还有适用于 Dart 的 Jaguar ORM: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 被抽象到浏览器中的本地存储是非常困难的。但至少摩尔正在努力实现它。

对于那些正在寻找 DateTime 转换器的人来说,Floor 和 Moor 已经支持它。Floor 从 0.17 版开始添加它:https ://github.com/vitusortner/floor#type-converters

如果您只需要关心android / ios,我会推荐您尝试Floor,主要是因为他的sintaxe真的非常好。

于 2020-02-11T19:44:47.257 回答
6

据我所知,Floor 是一个很新的东西。甚至它的文档也说明了它

该软件包仍处于早期阶段,API 可能会发生变化。

所以这意味着如果包被改变,那么你也必须调整你的代码。而 Moor 更受欢迎,您可以找到一些不错的教程。甚至Google Developers也将其用于演示目的。

于 2019-10-14T13:00:29.407 回答
3

我现在使用 Floor 是因为它的简单性。在我看来,其他选择要复杂得多。虽然它是新的,但到目前为止我从未遇到过问题。这一切都基于简单的注释,从我可以从文档中读取的内容中,所需的代码比 Moor 少得多。

于 2020-01-12T04:25:59.820 回答
0

Floor 是Fl​​utter的Android Room的替代品

于 2020-05-04T08:01:51.187 回答
0

我已经开始实施 Floor 并遇到了一个主要障碍——它不支持 DateTime。当然 sqlflite 本身并不支持 DateTime,但它似乎是一种非常必要的数据类型才能处理。Moor 完全在幕后处理这个问题(尽管我不喜欢放弃对模型的控制)。

于 2020-04-29T19:00:40.277 回答
0

Moor 支持 DateTime,Floor 不支持... Floor 已经在如何做到这一点上摇摆不定 - 提供类型转换器 -一年多了,我们等不及了,所以将我们的存储库代码从 Floor 重写为 Moor。

于 2020-07-08T14:41:36.627 回答