Dato il seguente codice:
class AnimalDescriptor {
String species;
boolean hasLegs;
boolean hasTeeth;
boolean hasHair;
public AnimalDescriptor(String species, boolean hasLegs,
boolean hasTeeth, boolean hasHair) {
this.species = species;
this.hasLegs = hasLegs;
this.hasTeeth = hasTeeth;
this.hasHair = hasHair;
}
class Animal {
AnimalDescriptor control;
String name;
int numberOfLegs;
int numberOfTeeth;
String colorOfHair;
}
class doStuff {
public void go() {
AnimalDescriptor dog = new AnimalDescriptor("dog", true, true, true);
AnimalDescriptor pirahna = new AnimalDescriptor("pirahna", false, true, false);
Animal fido = new Animal();
fido.control = dog;
fido.name = "Fido";
fido.numberOfLegs = 4;
fido.numberOfTeeth = 42;
fido.colorOfHair = "black"; //All good here
Animal bob = new Animal();
bob.control = pirahna;
bob.name = "Bob";
bob.numberOfTeeth = 42; //So far so good
bob.numberOfLegs = 2; //This should pass compilation, but fail
//validation at run-time, since it is
//nonsensical
}
Esiste un nome di modello per ciò che sto facendo qui? Ho provato a cercare variazioni sul titolo della mia domanda ma non ho ottenuto da nessuna parte.
Ovviamente, questo è un esempio estremamente semplice e abbreviato, AnimalDescriptor dovrebbe avere anche un metodo bool .validate(Animal a)
, e Animal dovrebbe avere un metodo .isPropertyAvailable(String propertyName)
, tra le altre aggiunte. Non volevo impantanare tutto con un esempio minuscolo di 500 righe.
Non è possibile che io sia la prima o l'unica persona a fare questo, e sono principalmente alla ricerca di qualcosa a cui aggrapparmi per ulteriori ricerche sulle migliori pratiche, i problemi di implementazione, ecc.
EDIT: Per fornire un po 'più di chiarezza, nel mio sistema ci sono ~ 20 booleani nella classe "control" (AnimalDescriptor). Sto monitorando ~ 10 6 elementi (Animali) in ~ 10 3 categorie (AnimalDescriptors) che condividono un pool di proprietà comuni, ma ogni elemento ha solo le proprietà che sono designato dalla sua configurazione "di controllo". Inoltre, il sistema dovrebbe essere in grado di espandersi, ad esempio, in 10 4 categorie (AnimalDescriptors) nei prossimi 5 anni. Abbiamo un'implementazione funzionale (se brutta), quindi non ho bisogno di validazione o eccezione how-to - Sono più interessato a come questo problema è stato affrontato in altri domini / applicazioni, i vantaggi dell'implementazione in un funzionale (come contrapposto al contesto orientato agli oggetti, best practice, ecc. Sembra che ci dovrebbe essere un nome per questo, ma non so cosa sia.