Ho un requisito software, che deve memorizzare l'utente che ha apportato l'ultima modifica a un altro oggetto, per ogni oggetto (si supponga che tutti gli oggetti siano già mappati e in un BD).
Quindi abbiamo il ParamBase un oggetto che contiene i dati di base per ogni oggetto, questa sarà una super classe, ogni altro parametro nel sistema erediterà questa classe, (usando @MappedSuperClass)
@MappedSuperclass
ParamBase {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Version
private Long version;
@Temporal(value = TemporalType.TIMESTAMP)
private Date timeStampLastModification;
@Column
private User userOfLastModification;
//constructors, getter setters, other stuff, etc
}
L'oggetto User, questo rappresenterà l'utente, anche mappato in un BD, per ora è solo semplice Oggetto mappato come Entità, tutti gli altri Parametri dovranno memorizzare questo Utente in un campo.
@Entity
User {
//User stuff, cons, get, seters, etc
}
@Entity
Country extends ParamBase {
//This class extends ParamBase so will have a field to hold the
//userOfLastModification
}
In un EJB ho una logica aziendale che funzionerà con diverse operazioni e oggetti, quando in questo caso un parametro viene aggiornato, la userSession (assegnata all'accesso) aggiornerà il campo userOfLastModification.
IL PROBLEMA: Tutti gli oggetti avranno una relazione con User, quindi tutti gli altri oggetti hanno un campo mappato userOfLastModification_id, questo crea una dipendenza enorme di tutti i clases all'utente. Per darti un'idea, basta un'immagine su un diagramma di Entity Relation ER, tutte le tabelle relative a un singolo User Table, è un casino !!!
IL REFATTORE !: Penso che questo modello sia sbagliato, penso che rompa l'equilibrio del design del software Non penso che sia necessario creare una relazione tra tutte le tabelle / oggetti su una tabella (Utente) per soddisfare questo requisito, mi piacerà qualche feedback o ides su come: 1. Spiega l'errore di progettazione, se ce n'è uno? (Penso sempre che potrei sbagliarmi, e non c'è alcun problema con questo)
- C'è un modo migliore per farlo?
Grazie per il tuo aiuto!