【问题标题】:Is this an anti-pattern/code smell? - Using enum/class of consts to access class properties with [] instead of using dot property这是反模式/代码气味吗? - 使用枚举/常量类通过 [] 而不是使用点属性访问类属性
【发布时间】:2021-05-27 11:32:21
【问题描述】:
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);
}

然后,当我想对 Fruit 做某事时,请使用 [] 而不是 .符号。

var banana = new Fruit('banana', 'a yellow fruit')
banana[FruitFields.DESCRIPTION]  = 'a very yellow fruit'

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

为什么?所以我可以不用思考就可以重构。如果我想将DESCRIPTION更改为SUMMARY,那么在FruitFields.DESCRIPTION verse apple.descriptionText、banana.descriptionText...上进行查找和替换会更容易,其中一些像car.descriptiontText这样的非水果对象可能有一个类似命名的属性,我必须小心。

我不知道这是否愚蠢。

【问题讨论】:

    标签: properties anti-patterns


    【解决方案1】:

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

    【讨论】:

    • 因此,当我在 javascript 中执行此操作时,我确实使用了命名枚举,但在 dart 枚举中只有整数值,这对于我演示的功能并不真正起作用。我的意思是,我认为拥有一个将所有属性值都作为数字而不是人类可读名称的对象是不可读的。除非我误会你了。就编译器而言,当我输入 FruitFields 时,我确实会得到一个自动建议,以确保我不会输入错误的内容,并且如果我输入了它会突出显示它。
    猜你喜欢
    • 2011-12-31
    • 2019-09-13
    • 1970-01-01
    • 2014-02-22
    • 2012-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多