我理解封装在OOP中的重要性,访问器(getter / setter)提供了这种抽象级别。
但是,使用Typescript,我可以在以后使用相同的名称替换我的属性和访问器,并将我的属性重命名为带有下划线的前缀(因此不会导致重大更改)。
例如,我可以:
class foo {
name: string;
}
稍后如果我想为此属性添加访问器,我可以更改为以下内容:
class foo {
private _name: string;
get name():boolean {
return this._name;
}
set name(name: string) {
this._name = name;
}
}
这被认为是不好的做法吗?
在这种情况下访问者的目的是什么?
访问器是一个实现细节。如果你遵循“program to the interface, not to the implementaion”规则,foo
的用户应该只看到
interface foo {
name: string;
}
这个界面的实现方式无关紧要。它可以是具有getter和setter的类,具有公共属性的类,甚至是普通对象。
最好的是由特定实现必须遵守的约束决定的。在大多数情况下,访问器似乎不是必需的,但有时可能很方便。