Properties 这是反模式/代码气味吗?-使用枚举/常量类访问具有[]的类属性,而不是使用点属性

Properties 这是反模式/代码气味吗?-使用枚举/常量类访问具有[]的类属性,而不是使用点属性,properties,anti-patterns,Properties,Anti Patterns,然后,当我想用水果做某事时,用[]代替。符号 class FruitFields { static const NAME = "name"; static const DESCRIPTION = "descriptionText"; } class Fruit { final string name; final string descriptionText; Fruit(required string id, required string

然后,当我想用水果做某事时,用[]代替。符号

class FruitFields {
  static const NAME = "name";
  static const DESCRIPTION = "descriptionText";
}

class Fruit {
final string name;
final string descriptionText;

Fruit(required string id, required string descriptionText);
}
为什么??所以我可以重构而不必思考。如果我想将“描述”更改为“摘要”,则更容易查找和替换果田。描述韵文apple.descriptionText,香蕉。descriptionText。。。其中一些非水果对象(如car.descriptionText)可能具有类似的命名属性,我必须小心


我不知道这是否愚蠢。

如果使用字符串,编译器无法帮助您发现值中的键入错误。但是,使用枚举时,编译器只允许您使用有效值。您还可以获得性能优势。枚举值只是一个数字,使用数字比使用字符串更快。

因此,当我在javascript中执行此操作时,我确实使用了命名枚举,但在dart枚举中只有整数值,对于我正在演示的功能来说,这些整数值实际上不起作用。我的意思是,我不认为一个对象的所有属性值都是数字而不是人类可读的名称是非常可读的。除非我误解了你。就编译器而言,当我键入水果场时,我会得到一个自动建议,确保我不会键入错误的内容,如果我键入了,它会突出显示它。
var banana = new Fruit('banana', 'a yellow fruit')
banana[FruitFields.DESCRIPTION]  = 'a very yellow fruit'

// instead of 
banana.descriptionText = 'a very yellow fruit'