吸气剂结构是否可以在没有相关属性的情况下存在?



例如,我有这样的代码

get isChart(): Observable<boolean> {
return this.isTemperatureChart.pipe(
withLatestFrom(this.isHypertensionChart),
map(([isTemperatureChart, isHypertensionChart]) => isTemperatureChart || 
isHypertensionChart)
);
}

或用于简化

get isChart(): boolean {
return this.isTemperatureChart && this.isSomeOtherPropertyTrue
}

很长一段时间,对我来说很明显,如果我有复杂的二进制逻辑,并且不需要来自外部的任何属性,我应该使用过程。只是为了清晰的代码,我一直尝试使用getter。但是现在我想,关于这种结构的一个性质,却找不到正确的答案。可以吗,将 getter 仅用于 GETTING,而不将其与某些类属性相关联?还是不是根据 OOP 和 getter/setter 的规范 - 仅用于类属性的封装?

返回基元值的第二个示例是绝对正确的,但第一个示例会导致问题,因为每次查询该属性时,它都会创建一个新Observable(如果您在模板中使用async管道,则创建一个订阅(。使用 angular,这将是该组件的每个更改检测周期,以及每次在组件 ts 中查询它时。

在这种情况下,您确实不应该使用getter。如果您希望使用者防止覆盖可观察量,并且只是读取它,则应设置readonly访问修饰符。这会将您的示例更改为:

readonly isChart$: Observable<boolean> = this.isTemperatureChart.pipe(
withLatestFrom(this.isHypertensionChart),
map(([isTemperature, isHypertension]) => isTemperature || isHypertension)
);

不知道你的代码,但从你的变量的命名来看,感觉你最好使用combineLatest而不是withLatestFrom

最新更新