我在Dart中有一个非常简单的类,它只有3个最终字段,一个构造函数和一个方法:
class Status {
final Context context;
final String carry;
final int depth;
const Status({
Context this.context,
String this.carry: null,
int this.depth: 0
});
Status dive({
Context context: null,
String carry: null,
int depth: null
}) {
return new Status(
context: context ?? this.context,
carry: carry ?? this.carry,
depth: depth ?? this.depth
);
}
}
dive
方法基本上创建了Status
的副本,其中包含明确提供的相同字段值。
我发现自己必须编写一个只有一个名为isSafe
的附加字段的子类:
class SecureStatus extends Status {
final bool isSafe;
}
此字段必须包含在构造函数和dive
方法中。这就产生了一个问题:为了达到这个目的,我必须为那个小字段重复疯狂的代码量。这显然违反了DRY rule:
class SecureStatus extends Status {
final bool isSafe;
// redundant from here...
const SecureStatus ({
Context context,
String carry: null,
int depth: 0,
bool this.isSafe: false
}) : super(
context: context,
carry: carry,
depth: depth
);
SecureStatus dive({
Context context: null,
String carry: null,
int depth: null,
bool isSafe: null
}){
return new SecureStatus(
context: context ?? this.context,
carry: carry ?? this.carry,
depth: depth ?? this.depth,
isSafe: isSafe ?? this.isSafe
);
}
// ...to here
}
由于little nuances around constructors,从基类复制粘贴代码甚至都不值得。
我知道there is no such thing as object copying in Dart,但我的用例必须有更好的方法。在我看来,使用镜子将是一种矫枉过正。在Scala中,我只使用案例类+ copy()
方法。 Dart有什么可以做的吗?也许我应该考虑完全不同的方法,我现在想念的?或者也许在将来的语言版本中会有一些功能,在这种情况下会有所帮助吗?