我有用于查询数据库的模型类。一切正常,没有问题。我现在正在尝试优化模型类中的代码。这是代码
class HumanFilter {
double age, maxAge, minAge, weight, minWeight, maxWeight, tall, minTall, maxTall, waist, minWaist, maxWaist;
set setMaxAge(String s) {
if (s != null) {
double parsed = double.tryParse(s) != null ? double.parse(s) : maxAge;
minAge = minAge != null && parsed != null
? parsed <= minAge && minAge != 0 ? parsed - 1 : minAge
: null;
maxAge = parsed;
age = parsed != null ? null : age;
} else {
maxAge = null;
}
}
set setMinAge(String s) {
if (s != null) {
double parsed = double.tryParse(s) != null ? double.parse(s) : minAge;
minAge = parsed;
maxAge = maxAge != null && parsed != null
? parsed >= maxAge ? parsed + 1 : maxAge
: null;
age = parsed != null ? null : age;
} else {
minAge = null;
}
}
set setAge(String s) {
if (s != null) {
double parsed = double.tryParse(s) != null ? double.parse(s) : age;
age = parsed != null ? parsed : age;
minAge = parsed != null ? null : minAge;
maxAge = parsed != null ? null : maxAge;
} else {
age = null;
}
}
// another setters for the rest of the parameters which are same as the code above
}
其余参数的设置器与我为年龄提供的设置器完全相同。例如,重量设置器与年龄设置器相同,但是设置minWeight,maxWeight和weight而不是minAge,maxAge和age。与minTall和minAge等相同。
我想创建3个方法,这些方法将使用最小值,最大值和标称值,然后返回可以在setter方法中分配的3个值的列表或映射,但是随后我还注意到min和max setter几乎是相同,因此也许也可以重用。我只是找不到合适的方法来重用(优化)代码
答案 0 :(得分:1)
分解此重复项的一种方法是提取类中的最小/最大/当前值:
class Interval {
double min;
double max;
double current;
}
这意味着您将在setMinAge
上拥有其中之一,而不是setMaxAge
+ Interval
+ ...
class Interval {
double min;
double max;
double current;
set setMax(String s) {
if (s != null) {
var parsed = double.tryParse(s) != null ? double.parse(s) : max;
min = min != null && parsed != null
? parsed <= min && min != 0 ? parsed - 1 : min
: null;
max = parsed;
current = parsed != null ? null : current;
} else {
max = null;
}
}
// setMin
// setCurrent
}