questa domanda è sorta di continuazione al mio post precedente: Visitor pattern implementation in java- How does this look?Pattern di strategia composita - java - Quanto è pericoloso questo codice?
mi sono un po 'confuso, mentre il refactoring il mio codice. Sto cercando di convertire il mio modello di visitatore (spiegato nel post precedente) in un modello di strategia composita. Sto cercando di fare qualcosa di simile:
public interface Rule {
public List<ValidatonError> check(Validatable validatable);
}
Ora, vorrei definire una regola come questa:
public class ValidCountryRule {
public List<ValidationError> check(Validatable validatable) {
// invokeDAO and do something, if violation met
// add to a list of ValidationErrors.
// return the list.
}
}
Ora, potrei avere due tipi diversi oggetti da convalidare. Questi due potrebbero essere completamente diversi: dire che ho un negozio che è Validatable
, e quindi un Schedule
che è Validatable
. Ora, se io avrei scritto un composito che sarebbe simile a questa:
class Validator implements Rule {
private List<Rule> tests = new ArrayList<Rule>();
public void addRule(Rule rule) {
tests.add(rule);
}
public List<ValidationError> check(Visitable visitable) {
List<ValidationError> list = new ArrayList<ValidationError>();
for(Rule rule : tests) {
list.addAll(rule.check(visitable);
}
}
public Validator(ValidatorType type) {
this.tests = type.getRules();
}
}
vorrei definire un enum
che definisce un insieme di controlli andare dove ...
public Enum ValidatorType {
public abstract List<Rule> getRules();
STORE_VALIDATOR {
public List<Rule> getRules() {
List<Rule> rules = new ArrayList<Rule>();
rules.add(new ValidCountryRule());
rules.add(new ValidXYZRule());
}
// more validators
}
e, infine, vorrei utilizzare così:
Validator validator = new Validator(ValidatorType.STORE_VALIDATOR);
for (Store store : stores) {
validator.check(store);
}
Ho la strana sensazione che il mio disegno sia difettoso. Non mi piace l'idea che la mia interfaccia Rule si aspetta un Validatable
. Potresti per favore suggerire come migliorerei questo?
Apprezzo il tuo aiuto.
Stai rompendo tutte le regole di indentazione. Se vuoi che gli altri guardino e ti aiutino con qualcosa il tuo codice ha bisogno di apparire un po 'meglio.In questo momento ha un odore di codice orribile. –
@Trevor Ci scusiamo, l'ho risolto ora. – Jay
La rientranza era ancora alquanto illeggibile. L'ho riparato. – Eddie