Uogólniając jak najlepiej walidować przed użyciem metody?
class Service {
this validate(Object o) {
isValid = isOk(o);
if ( !isValid) {
throw new Exception();
log.error("rerer");
}
return this;
}
void run(Object o) {
o.run();
}
}
// CLIENT:
service.validate(o).run(o);
czy
class Service {
// przez buildera, który interfejsami najpierw pozwala puscic tylko validatei dopiero run, nie chce mi się pisać tego
}
// CLIENT:
service.validate(o).run();
czy
class Service {
void validate(Object o) {
isValid = isOk(o);
if ( !isValid) {
throw new Exception();
log.error("rerer");
}
return this;
}
void runSafe(Object o) {
validate(o);
o.run();
}
}
// CLIENT:
service.runSafe(o);
czy
class Service {
boolean isValid(Object o) {
return isOk(o);
}
void run(Object o) {
o.run();
}
}
// CLIENT:
isValid = service.validate(o)
if (isValid) {service.runSafe();}
else {}
czy
class Service {
Service.ValidationResult isValid(Object o) {
boolean isValid isOk(o);
return new ValidationResult(o, isValid);
}
void run(ValidationResult vr) {
vr.o.run();
}
}
// CLIENT:
ValidationResult vr = service.validate(o)
service.run(vr)
Inaczej?