Flutter:停泊和地面ORM之间的区别

时间:2019-10-14 12:03:21

标签: sqlite flutter dart flutter-moor flutter-floor

所以我一直在寻找Flutter的一些ORM ,我发现了两个候选人MoorORMs

看起来像 Moor拥有更多的活动存储库,但是当我来自Android世界时, Floor似乎更类似于 与Room 我曾经爱过。

当前,我赞成使用Floor ,但是在生产中使用它之前,有没有我应该注意的隐藏陷阱?

6 个答案:

答案 0 :(得分:8)

我也怀疑哪种产品最适合生产环境。看来Moor已经很稳定了,已经过战斗测试并可以生产了。在Moor常见问题解答中有一个很好的技术说明,比较了Moor和Floor以及其他替代方法:

Floor还具有许多便利功能,例如自动更新 查询和架构迁移。与系泊类似,您可以定义 Dart中数据库的结构。然后,您在 sql-映射代码(如果由floor生成)。系泊有类似 功能,但它也可以验证您的查询在编译时是否有效 时间。摩尔还提供了一个API,可让您编写一些查询 在Dart中而不是sql中。

这两者之间的区别是Floor让您编写自己的 类并围绕该类生成映射代码。摩尔产生最多 类,可以使其更易于使用,但使api 在某些情况下不太灵活。

我进行了一些测试,包括sqfEntity,它对员工进行了脚手架的概念设计,并且它所做的更多工作,例如表单,而不仅仅是数据持久性。在我看来,Floor更接近于Hibernate,主要是在创建Entities的方式上,只需对它们的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提取到浏览器中的本地存储非常困难。但是至少Moor正在努力实现这一目标。

对于那些希望使用DateTime转换器的用户,Floor和Moor已经支持它。 Floor从版本0.17开始添加:https://github.com/vitusortner/floor#type-converters

如果您只需要担心android / ios,我建议您尝试Floor,主要是因为他的sintaxe真的很好。

答案 1 :(得分:3)

据我所知,地板是一个相当新的东西。甚至其documentation都表示

  

此软件包仍处于早期阶段,API可能会更改。

因此,这意味着如果更改了软件包,则还必须调整代码。 摩尔(Moor)更受欢迎,您可以找到一些不错的教程。甚至Google Developers都将其用于演示目的。

答案 2 :(得分:3)

此刻,我正在使用Floor以简化操作。我认为其他选择更为复杂。尽管它是新的,但到目前为止,我从未遇到过任何问题。 一切都是基于简单的注释,从Moor的文档中读取的代码比Moor少得多。

答案 3 :(得分:0)

我已经开始实施Floor并遇到了一个主要障碍-它不支持DateTime。授予的sqlflite本身不支持DateTime,但是似乎很需要处理的数据类型。摩尔完全在幕后处理此问题(尽管我不喜欢放弃对模型的控制)。

答案 4 :(得分:0)

地板是Android Room的替代物

答案 5 :(得分:0)

Moor支持DateTime,Floor不支持。Floor一直在徘徊如何执行操作-提供类型转换器-超过一年了,我们迫不及待,因此重写了存储库代码表从地板到沼泽。