Abbiamo due moduli, chiamiamoli U e F.
Il modulo U ha entità del tipo:
class Upload {
Long id;
User uploadedBy;
Date uploadedAt;
}
Il modulo F ha entità del tipo:
class Field {
Long id;
String displayName;
Type type;
}
Entrambi hanno i tipici bean manager con creare, modificare, eliminare e alcune GUI a seconda di essi.
Quindi ora ciò che un cliente desidera avere è che noi aggiungiamo alle entrate del modulo U in modo che sembrino così:
class Upload {
// fields as above
List<Field> fields;
}
Non penso che sia la migliore idea, perché creerebbe una dipendenza tra F e U che non è necessaria per la maggior parte dei clienti. Così ora stiamo cercando di trovare una buona architettura che ci permetta di modellare ciò che il cliente vuole senza creare dipendenze.
Una cosa che mi è venuta in mente è stata creare un modulo E con entità del genere:
class ExtendedUpload1 {
Upload upload;
List<Field> fields;
}
// or...
class ExtendedUpload2 extends Upload {
List<Field> fields;
}
Quindi solo quel modulo avrà dipendenze sia da F che da U, e sia F che U possono vivere separatamente. Ma abbiamo un'API tra GUI e server, che significa classi di valori separati e interfacce con cui entrambe le parti lavorano. E mentre possiamo iniettare funzionalità aggiuntive sia per la GUI che per il server, l'estensione dinamica dell'API è il vero problema. Dovremmo copiare tutte le classi API per lavorare con i nuovi valori.
Quali schemi architettonici si applicano a quel caso d'uso? Come potremmo risolvere elegantemente il problema?