bounty将在6天内到期。此问题的答案有资格获得+500声望奖励。cja希望引起更多关注这个问题。
我了解到,在flutter中使用hive数据库可以将自定义对象存储为json字符串。然后可以选择编写一个自定义类型适配器,以二进制格式存储数据。那么,当开发人员可以将自定义对象存储为json字符串格式时,为什么还需要花费更多的时间来实现类型适配器呢?
gev0vcfq1#
以下是许多原因中的两个,可以解释为什么要使用模型而不仅仅是JSON表示数据:
如果你有一个模型,你可以确保你的结构类型。例如,如果你有一些数据代表一个人:
{ "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,因为这会导致编译错误。
Person
name
age
通过使用模型,您的IDE将提供正确的自动完成/智能感知,从而加快您的工作进度。
dojqjjoe2#
在Hive数据库中将自定义对象存储为JSON字符串确实是一种简单方便的方法。使用此方法时,您只需为模型定义toJson和fromJson方法。与使用@HiveType()和@HiveField()注解编写模型、生成TypeAdapter文件并将其注册到main()方法中相比,这种方法更简单明了。但是,在某些情况下,使用自定义TypeAdapter可能是有益的。以下是几个原因:1.性能:使用自定义TypeAdapter,可以在存储空间和处理速度方面更有效。JSON字符串的大小往往比二进制数据大。1.架构进化:使用JSON时,如果在自定义对象中添加或修改字段,现有的JSON数据可能无法正确反序列化。使用TypeAdapter,您可以更好地控制模式演变,因为您可以显式定义如何处理旧版本的数据。1.复杂数据结构:JSON非常适合简单的键值对,但是如果你有复杂的数据结构,比如嵌套对象或集合,自定义TypeAdapter可以帮助你更有效地序列化和反序列化它们。因此,虽然将自定义对象存储为JSON字符串是一个方便的选择,但如果您优先考虑性能、模式演变或应用程序中具有复杂的数据结构,则实现自定义TypeAdapter可能值得考虑。
toJson
fromJson
@HiveType()
@HiveField()
main()
2条答案
按热度按时间gev0vcfq1#
以下是许多原因中的两个,可以解释为什么要使用模型而不仅仅是JSON表示数据:
1.类型安全:
如果你有一个模型,你可以确保你的结构类型。
例如,如果你有一些数据代表一个人:
问题是,没有什么可以阻止您写入/检索错误的数据类型!您可能会错误地将上述数据改写为:
如果你想创建一个模型:
这将确保你 * 不能 * 创建一个
Person
对象,用 * number * 作为name
或 * string * 作为age
,因为这会导致编译错误。2.自动补全:
通过使用模型,您的IDE将提供正确的自动完成/智能感知,从而加快您的工作进度。
dojqjjoe2#
在Hive数据库中将自定义对象存储为JSON字符串确实是一种简单方便的方法。使用此方法时,您只需为模型定义
toJson
和fromJson
方法。与使用@HiveType()
和@HiveField()
注解编写模型、生成TypeAdapter文件并将其注册到main()
方法中相比,这种方法更简单明了。但是,在某些情况下,使用自定义TypeAdapter可能是有益的。以下是几个原因:
1.性能:使用自定义TypeAdapter,可以在存储空间和处理速度方面更有效。JSON字符串的大小往往比二进制数据大。
1.架构进化:使用JSON时,如果在自定义对象中添加或修改字段,现有的JSON数据可能无法正确反序列化。使用TypeAdapter,您可以更好地控制模式演变,因为您可以显式定义如何处理旧版本的数据。
1.复杂数据结构:JSON非常适合简单的键值对,但是如果你有复杂的数据结构,比如嵌套对象或集合,自定义TypeAdapter可以帮助你更有效地序列化和反序列化它们。
因此,虽然将自定义对象存储为JSON字符串是一个方便的选择,但如果您优先考虑性能、模式演变或应用程序中具有复杂的数据结构,则实现自定义TypeAdapter可能值得考虑。