Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    698

    [JAVA/SQL] Un suggerimento su una semplice struttura

    Ho una struttura relazionale molto semplice di questo tipo
    codice:
    +------------------+1               *+--------+
    |Categoria edificio|-----------------|Edificio|
    +------------------+                 +--------+
            |                                |
            |                                |
            |           +-------+            |
            +---------- |Risorsa|------------+
          Costo         +-------+         Produzione
    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.
    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


  2. #2
    Banalmente devi creare una classe per ogni tabella del db

    Le classi devono rappresentare il "dato" non la lista di dati.

    Percui ad esempio ti credi la classe edificio:
    codice:
    public class Edificio {
      private int id;
      private String nome;
      private String locazione;
      private int idCategoriaEdificio
    
    }
    percui la lista degli edifici sara banalmente un array di Edificio, oppure in vector con dentro tanti oggetti Edificio.

    Se sei un po smaliziato a livello di programmazione e java, e non lo conosci dai uno sguardo a questo sito: http://ibatis.apache.org/
    E' in framework per l'accesso ai dati.

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    698
    argh
    lo sapevo che non mi ero spiegato, aggiungo come implemento quell'ER
    codice:
    class TipoEdificio {
         protected int id;
         protected String nome; //banca,ospedale, cinema ....
         // qui qualcosa che mi tenga traccia 
         // del costo di costruzione, il che è uno dei problemi
         // che vorrei risolvere nel thread
         // Mi serve la quantita di ogni risorsa presente nel db.
         // Avevo pensato di implementare questa cosa tramite Properties,
         // (id_risorsa = costo) vettori o simili
    
         // di seguito i metodi get/set
    }
    
    class Edificio {
         protected int id;
         protected TipoEdificio tipologia;
         // qui ci va la stessa cosa di TipoEdificio, solo che questa
         // volta è legata alla produzione/consumo di una data risorsa
    
         // altro
    }
    
    class Risorsa {
         protected int id;
         protected String nome; // Soldi,combustibile,personale,salatini
    }
    Spero di aver chiarito quello che volevo dire

  4. #4
    questa informazione:
    // Mi serve la quantita di ogni risorsa presente nel db.
    // Avevo pensato di implementare questa cosa tramite Properties,
    // (id_risorsa = costo) vettori o simili
    E' contenuta in una tabella del db?? Giusto???

  5. #5
    Utente di HTML.it L'avatar di Angelo1974
    Registrato dal
    Feb 2003
    Messaggi
    1,107
    Ciao; ad occhio l'approccio 3 (cioè quello misto) che hai descritto mi sembra il giusto compromesso; infatti per le risorse note non ci dovrebbe essere nessun problema ad inserirle nelle classi; infatti nella maggior parte dei casi le risorse note non sono modificate, nelle tabelle is aggiungono delle risorse mentre quelle note non dovrebbero essere toccate.
    Quindi potresti inserire le risorse note come delle stringhe all'interno delle classi Edificio e TipoEdificio. DOpo di che puoi utilizzare un java.util.List oppure un java.util.Map per riferirti a degli attributi, diciamo così, "straordinari".
    Ciao
    Se vuoi trovare l'arcobaleno, devi sopportare la pioggia

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    698
    Si, in una tabella, ma una tabella di relazione e non di entita.
    La relazione 'costo' avra delle righe fatte cosi

    codice:
    id_categoria_edificio | id_risorsa | quantita
               1                 2        100000
    id_categoria_edificio | id_risorsa | quantita
               1                 3          20
    eccetera, il che significa che l'edificio di tipologia 1 (es:la banca) costa 100000 di risorsa 2 (es:soldi) e 20 di risorsa 3 (es:salatini)

    Lo stesso dicasi per la relazione consumo

    codice:
    idedificio | id_risorsa | quantita
         6            2          40
    idedificio | id_risorsa | quantita
         6            3          -20
    il che significa che l'istanza di edificio '6' produce 40 unita di risorsa 2(es:soldi) e consuma 20 unita di risorsa 3(salatini)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.