所以我一直在寻找Flutter的一些ORM ,我发现了两个候选人Moor
和ORMs
。
看起来像 Moor拥有更多的活动存储库,但是当我来自Android世界时, Floor似乎更类似于 与Room 我曾经爱过。
当前,我赞成使用Floor ,但是在生产中使用它之前,有没有我应该注意的隐藏陷阱?
答案 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一直在徘徊如何执行操作-提供类型转换器-超过一年了,我们迫不及待,因此重写了存储库代码表从地板到沼泽。