private void match(NodeChannelFieldCompositeKey key, double value, SLA sla) {
if(sla == null)
return;
if(sla.type == SLAType.LowerLimit) {
if(value < sla.errorValue) {
ViolationType t = violations.put(key, ViolationType.ERROR);
if(t == null) {
createLog(key, sla, value, "ERROR level violation");
} else if(t == ViolationType.WARNING) {
createLog(key, sla, value, "SLA violation changed from WARNING to ERROR");
}
}
else if(value < sla.warningValue) {
ViolationType t = violations.put(key, ViolationType.WARNING);
if(t == null) {
createLog(key, sla, value, "WARNING level violation");
} else if(t == ViolationType.ERROR) {
createLog(key, sla, value, "SLA violation changed from ERROR to WARNING");
}
} else {
ViolationType t = violations.remove(key);
if(t != null) {
createLog(key, sla, value, "SLA violation ended");
}
}
} else if(sla.type == SLAType.UpperLimit) {
if(value > sla.errorValue) {
ViolationType t = violations.put(key, ViolationType.ERROR);
if(t == null) {
createLog(key, sla, value, "ERROR level violation");
} else if(t == ViolationType.WARNING) {
createLog(key, sla, value, "SLA violation changed from WARNING to ERROR");
}
}
else if(value > sla.warningValue) {
ViolationType t = violations.put(key, ViolationType.WARNING);
if(t == null) {
createLog(key, sla, value, "WARNING level violation");
} else if(t == ViolationType.ERROR) {
createLog(key, sla, value, "SLA violation changed from ERROR to WARNING");
}
} else {
ViolationType t = violations.remove(key);
if(t != null) {
createLog(key, sla, value, "SLA violation ended");
}
}
}
}
- NagyZ blogja
- A hozzászóláshoz be kell jelentkezni
- 905 megtekintés
Hozzászólások
Schni-SLA-Schnappi, das kleine krokodil?
- A hozzászóláshoz be kell jelentkezni
Hát így az osztályok, enumok nélkül nem túl jó, mert minden alá van húzva pirossal. Elsőre most így ennyi sikerült. Még ma lehet ránézek kicsit, de most meguntam, pedig még van benn tartalak. Persze lehet már most is elrontottam. :)
private void match(NodeChannelFieldCompositeKey key, double value, SLA sla) {
if(sla == null)
return;
if((value < sla.errorValue && sla.type == SLAType.LowerLimit) || (value > sla.errorValue && sla.type == SLAType.UpperLimit)) {
callCreateLog(ViolationType.ERROR, ViolationType.WARNING, key, value, sla);
}
else if((value < sla.warningValue && sla.type == SLAType.LowerLimit) || (value > sla.warningValue && sla.type == SLAType.UpperLimit)) {
callCreateLog(ViolationType.WARNING, ViolationType.ERROR, key, value, sla);
} else if (sla.type == SLAType.LowerLimit || sla.type == SLAType.UpperLimit) {
remove(key, value, sla);
}
}
private void callCreateLog(ViolationType v1, ViolationType v2, NodeChannelFieldCompositeKey key, double value, SLA sla) {
ViolationType t = violations.put(key, v1);
if(t == null) {
createLog(key, sla, value, v1.toString() + " level violation");
} else if(t == v2) {
createLog(key, sla, value, "SLA violation changed from " + v2.toString() + " to " + v1.toString());
}
}
private void remove(NodeChannelFieldCompositeKey key, double value, SLA sla) {
ViolationType t = violations.remove(key);
if(t != null) {
createLog(key, sla, value, "SLA violation ended");
}
}
- A hozzászóláshoz be kell jelentkezni
ez egy viszonylag jo megoldas, csak akkor van baj, hogyha tamogatni akarod a "between" -t is SLAul, mert akkor a matchben nemlesz ilyen szep az if.
az sla.type az egy SLAType nevu enum, ket ertek van benne: UpperLimit es LowerLimit. a tobbi sima (immutable) class.
- A hozzászóláshoz be kell jelentkezni
private void match(NodeChannelFieldCompositeKey key, double value, SLA sla, SLAHandler[] handlers) {
if (sla == null) {
return
}
for (SLAHandler handler: handlers) {
if (handler.accept(sla, value)) {
handler.processSLA(key, value, sla);
return;
}
}
}
Az interface definicioja ez alapjan egyertelmu, szerintem. A kulonbozo implementaciokba mehet az if-eken beluli trutyi.
- A hozzászóláshoz be kell jelentkezni
es ha oda irod a trutyit, mennyivel lesz szebb?:)
- A hozzászóláshoz be kell jelentkezni
Ilyesmikre gondoltam:
class LowerLimitSLAHandler implements SLAHandler {
public booealn accept(SLA sla, double value) {
return sla.type == SLAType.LowerLimit && value < sla.errorValue;
}
public void process(Map<?, ?> violations) {
ViolationType t = violations.put(key, ViolationType.ERROR);
if(t == null) {
createLog(key, sla, value, "ERROR level violation");
} else if(t == ViolationType.WARNING) {
createLog(key, sla, value, "SLA violation changed from WARNING to ERROR");
}
}
}
Es igy tovabb. Oke, megvaltozott az interface, meg a createLog csak log a levegoben, de talan jobban mutatja mi az elkepzeles.
- A hozzászóláshoz be kell jelentkezni
OOs elvek szerint jobb a szeparacio, teny, viszont a kod nem lett rovidebb, sot... :)
delutan megyek ZHt iratni, majd feldobom amit kitalaltam refactoringot, bar olyan nagy otlet nincs benne, csak ugy megtetszett,hogy lehet ilyet is.. :)
- A hozzászóláshoz be kell jelentkezni
Toredelmesen bevallom, hogy itt most csak a conditional with Polymorphism technikat alkalmaztam butan, nem neztem, hogy mennyire passzol a problemahoz
- A hozzászóláshoz be kell jelentkezni