Flutter Hive:TypeAdapter vs保存为json字符串?

lnvxswe2  于 2023-05-23  发布在  Flutter
关注(0)|答案(2)|浏览(167)

bounty将在6天内到期。此问题的答案有资格获得+500声望奖励。cja希望引起更多关注这个问题。

我了解到,在flutter中使用hive数据库可以将自定义对象存储为json字符串。然后可以选择编写一个自定义类型适配器,以二进制格式存储数据。
那么,当开发人员可以将自定义对象存储为json字符串格式时,为什么还需要花费更多的时间来实现类型适配器呢?

gev0vcfq

gev0vcfq1#

以下是许多原因中的两个,可以解释为什么要使用模型而不仅仅是JSON表示数据:

1.类型安全:

如果你有一个模型,你可以确保你的结构类型。
例如,如果你有一些数据代表一个人:

{
  "name": "John Doe",
  "age": 30
}

问题是,没有什么可以阻止您写入/检索错误的数据类型!您可能会错误地将上述数据改写为:

{
  "name": 12345,
  "age": "thirty"
}

如果你想创建一个模型:

class Person {
  final String name;
  final int age;

  Person({required this.name, required this.age});
}

这将确保你 * 不能 * 创建一个Person对象,用 * number * 作为name或 * string * 作为age,因为这会导致编译错误。

2.自动补全:

通过使用模型,您的IDE将提供正确的自动完成/智能感知,从而加快您的工作进度。

dojqjjoe

dojqjjoe2#

在Hive数据库中将自定义对象存储为JSON字符串确实是一种简单方便的方法。使用此方法时,您只需为模型定义toJsonfromJson方法。与使用@HiveType()@HiveField()注解编写模型、生成TypeAdapter文件并将其注册到main()方法中相比,这种方法更简单明了。
但是,在某些情况下,使用自定义TypeAdapter可能是有益的。以下是几个原因:
1.性能:使用自定义TypeAdapter,可以在存储空间和处理速度方面更有效。JSON字符串的大小往往比二进制数据大。
1.架构进化:使用JSON时,如果在自定义对象中添加或修改字段,现有的JSON数据可能无法正确反序列化。使用TypeAdapter,您可以更好地控制模式演变,因为您可以显式定义如何处理旧版本的数据。
1.复杂数据结构:JSON非常适合简单的键值对,但是如果你有复杂的数据结构,比如嵌套对象或集合,自定义TypeAdapter可以帮助你更有效地序列化和反序列化它们。
因此,虽然将自定义对象存储为JSON字符串是一个方便的选择,但如果您优先考虑性能、模式演变或应用程序中具有复杂的数据结构,则实现自定义TypeAdapter可能值得考虑。

相关问题