枚举可以共享具体方法以避免在 Dart/Flutter 中重复吗?

问题描述 投票:0回答:1

我使用具有 [unit] 属性(枚举)的值对象。 我的枚举实现了一个接口,允许单位之间的转换(厘米到米,公斤到克等......)

像这样:

class Height {
  final double value;
  final DistanceUnit unit;
  
  const Height({required this.value, this.unit = DistanceUnit.cm});
}
// Directly implementing Enum so that only enums can implement this ; important for another method.
abstract interface class Convertible implements Enum {
  final double factor;

  Convertible({required this.factor});

  double getConversionFactor(covariant Convertible from, covariant Convertible to);
}

enum DistanceUnit implements Convertible {
  cm(factor: 1/100),
  m(factor: 1);
  
  @override
  final double factor;
  
  const DistanceUnit({required this.factor});
  
  @override
  double getConversionFactor(covariant Convertible from, covariant Convertible to) {
    return from.factor / to.factor;
  }
}

这工作得很好,但由于我有很多单位(面积、距离、体积、时间、质量......),它变得非常冗长和重复。 getConversionFactor() 方法始终相同...所以我们离 DRY 建议还很远!

我知道枚举继承自 Enum 并且不能扩展另一个类。但是有其他方法可以防止这种情况并优化我的代码吗?

flutter dart
1个回答
0
投票

我更愿意为此延期。

class MyModel {
  const MyModel(this.valueInCM);

  ///* in minimum  unite, e.g for your domain level,
  /// we can consider from cm, if needed you goes down too
  final double valueInCM;
}

extension MyModelExt on MyModel {
  double get toMeter => valueInCM / 100;
  double get toKM => valueInCM / 1000;
}

您还可以在 dart 中查看

Duration
课程。

© www.soinside.com 2019 - 2024. All rights reserved.