为什么我应该避免在getter和setter中包装字段?

时间:2020-05-10 23:50:23

标签: flutter dart

我正在构建Flutter应用。我有一堂课,像这样:

class ToDo {
    String _title;
    bool _done;

    String get title => _title;
    void set title(String newTitle) { _title = newTitle; }

    bool get _done => _done
    void set done(bool done) { _done = done; }
}

但是Dart linter抱怨我应该“为了安全起见,避免在getter和setter中包装字段”。但是,这对我来说没有多大意义。现在,吸气剂是无用的,但是如果将来我需要在从外部访问变量之前进行某种处理,该怎么办?我要做的就是更新吸气剂。但是,如果这些属性是公共属性并且可以直接访问,那么如果某些业务规则发生更改,我将不得不更新整个代码库。

那么这个警告的意义是什么?或者换句话说,为什么创建“无用的吸气剂”将是一个坏习惯?

1 个答案:

答案 0 :(得分:6)

但是,如果属性是公共的并且可以直接访问,那么如果某些业务规则发生更改,我将不得不更新整个代码库。

问一下自己:如果您必须将公共成员更改为显式的getter和setter,那么在Dart代码库中究竟需要更改什么?

在大多数语言中,getter和setter看起来像是对消费者的方法调用。如果您想用公共获取器和设置器替换公共数据成员,那将是一项重大的API更改,要求对使用它的所有内容进行更改。

Dart不是那样的。 getter和setter不会像对消费者的方法调用那样。它们与直接成员访问没有区别。 (让公共数据成员隐式声明一个对应的getter和setter作为类接口的一部分。)将公共数据成员更改为Public getter和setter不需要对调用者进行任何更改,因此在私有成员周围提供了简单的getter和setter。变量没有好处。

(您遇到的unnecessary_getters_setters lint的文档也对此进行了解释。)

顺便说一句,unnecessary_getters_setters棉绒应该仅在 出现,如果您同时提供了一个getter 和一个 setter(这不是您的示例代码所做的)。如果仅提供一个,则它将不再等效于公共数据成员。

相关问题