在Dart中没有最终字段的类是不是一个好的做法?



我有这种情况,我想让类响应,我将使用GetX库为例。

我有这个User类。

class User {
User({
required this.id,
required this.name,
});
int id;
String name;
factory User.fromJson(Map<String, dynamic> json) => User(
id: json["id"],
name: json["name"],
);
Map<String, dynamic> toJson() => {
"id": id,
"name": name,
};
}

我将使这个类具有反应性。

final Rx<User> user = User(1, "Test");

字段不能是final,因为我可能需要重新分配它们并重新构建某些小部件,例如。

user.value.name = "Test2";
user.refresh(); // This will trigger rebuild widget.

如果我在类中有final字段,我需要对每个字段有单独的响应字段,我需要更新和重建小部件:

final RxInt id = 0.obs;
final RxString name = "Test".obs
id.value = 1; // This would trigger rebuild widget.
name.value = "Test2"; // This would trigger rebuild widget.

假设我有20个或更多的字段,没有final字段会更容易,这不是一个很好的实践创建这样的类吗?

这更容易,但您应该明白,所有.obs(如vars)都是类似流的,这没有经过优化,但非常容易使用和理解。我在项目中使用类不可变对象,因为它比变量突变更明显,而且作为一个优点,我可以保存所有的类状态,因为所有的类都改变了它的其他类实例。

不可变方式和可变方式是不同的,所以在某些情况下或对某些体系结构来说,一种方式比另一种更好,第二种方式也是如此。

你可以阅读https://bloclibrary.dev/和https://github.com/jonataslaw/getx/blob/master/documentation/en_US/state_management.md。有两种不同的方法来构建arch,你可以为你的问题创建自己的结论

最新更新