Ho una struttura relazionale molto semplice di questo tipo
Il significato è: esistono molte risorse, esiste un edificio che è di una categoria ben precisa. Ogni edificio di una certa categoria ha un costo di costruzione che interessa alcune risorse, in quantita variabili. Ogni edificio produce/consuma nessuna,una o piu risorse.codice:+------------------+1 *+--------+ |Categoria edificio|-----------------|Edificio| +------------------+ +--------+ | | | | | +-------+ | +---------- |Risorsa|------------+ Costo +-------+ Produzione
Allo stato attuale le risorse da rappresentare sono solamente quattro ma non mi fido a mapparle direttamente nelle entita (tipo mettere un campo 'costo' dentro 'categoria_edificio', per intenderci),perche si sa che queste cose sono spesso soggette a variazioni improvvise e dover modificare ogni tabella ed ogni classe solo per dover aggiungere una risorsa mi fa venire i brividi(ma magari sbaglio io)
Mi trovo in difficolta a mappare questa situazione in Java, o meglio, il problema è addirittura a monte di java: non riesco a mapparlo bene in un mondo OO.
Ovviamente ho tre classi, una per ogni entita, mentre le relazioni vorrei cercare di tradurle come attributi.
Ho pensato tre approcci possibili, ma nessuno mi convince realmente:
il primo è completamente elastico, nel senso che si svincola del tutto dal tipo/numero di risorse disponibili, ma ha come controindicazione il fatto di dover richiedere diversi accessi al db piu altre operazioni lato applicazione per ottenere, alla fine dei conti, quattro numerelli
il secondo è l'esatto contrario: mappare le quattro risorse come campi della classe categoria_edificio, il che è molto piu efficiente in termini di prestazioni ma molto pesante per quanto riguarda la manutenzione del codice
il terzo è un ibrido: mappare queste quattro risorse come campi all'interno delle classi, e lasciare una certa struttura in grado di gestire futuri aggiornamenti nella tabella risorse.
Ecco fatto, questo è il problema, spero di essermi spiegato.
Per chiarezza aggiungo una sintesi delle tre soluzioni proposte, ma se a qualcuno venisse in mente una cosa piu semplice e performante gli sarei grato se la postasse ^^...anche perche ho la spiacevole sensazione che una soluzione estremamente banale è dietro l'angolo ma non riesco a vederla...
1.Approccio elastico
Mappo all'interno della classe che rappresenta 'categoria_edificio' un vettore, o altra struttura dati, che tiene traccia di ogni oggetto Risorsa relativo al costo. Questo comporta per ogni operazione un accesso al vettore, un accesso alla classe Risorsa ed un accesso al campo...per ottenere uno stupido float.
Lo stesso dicasi per la classe edificio, in cui dovrei mappare produzione e consumo.
2.Approccio anelastico ^^
Mappo dentro categoria_edificio i costi come 4 campi float...e che dio me la mandi buona
3.Approccio misto
approcico 2 per le risorse note, approccio 1 per eventuali risorse future
Scusate il post prolisso, grazie in anticipo