Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    [OOP] Consiglio su struttura programma

    vorrei fare una domanda generica sulla programmazione OOP per strutturare meglio la mia applicazione che verrà fatta in java, php e probabilmente anche c#.
    nello specifico riguarda le varie operazioni svolte dal db.
    ho diverse select, insert e update.
    la mia domanda è: creare una classe per ognuna di queste operazioni, o un'unica classe con dentro i vari metodi??
    io per ora ho seguito la prima via, ma così facendo vengono create parecchie classi.
    quel'è la procedura consigliata in questi casi??

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    Re: [OOP] Consiglio su struttura programma

    Beh, io di solito mi creo una classe singleton DBMSController e faccio fare a questa tutte le query... Una classe per ogni operazione mi pare eccessivo
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3

    Re: Re: [OOP] Consiglio su struttura programma

    Originariamente inviato da Alex'87
    Beh, io di solito mi creo una classe singleton DBMSController e faccio fare a questa tutte le query... Una classe per ogni operazione mi pare eccessivo
    Singleton eh.....
    mai usato.
    mi informo e vedo se riesco a compattare il tutto.

  4. #4
    una cosa del genere?
    codice:
    package frame;
    
    import java.sql.*;
    import javax.swing.table.DefaultTableModel;
    
    public class DBManager {
    
        private static DBManager instance = null;
        final static String HOST = "";
        final static String DB = "";
        final static String USER = "";
        final static String PWD = "";
        private static Connection conn = null;
    
        public static DBManager getInstance() {
            if (instance == null) {
                instance = new DBManager();
            }
            return instance;
        }
    
        public static Connection getConnection() throws ClassNotFoundException, SQLException {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection("jdbc:mysql://" + HOST + ":3306/" + DB + "?user=" + USER + "&password=" + PWD);
            return conn;
        }
    
        public static void select() throws ClassNotFoundException, SQLException {
            conn  = getConnection();
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery("SELECT * FROM bookv");
            while (rs.next()) {
                String id = rs.getString("book_id");
                String name = rs.getString("name");
                String author = rs.getString("author_name");
                String editor = rs.getString("editor_name");
                String price = rs.getString("price");
                String isbn = rs.getString("isbn");
                String note = rs.getString("note");
                Object[] riga = {id, name, author, editor, price, isbn, note};
                ((DefaultTableModel) Main.getTable().getModel()).addRow(riga);
            }
            rs.close();
            stmt.close();
        }
    
        public static void disconnect() throws SQLException {
            if (conn != null) {
                conn.close();
            }
        }
    }
    e poi lo richiamo così:
    DBManager.select();

  5. #5
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da fermat
    una cosa del genere?
    ...
    e poi lo richiamo così:
    DBManager.select();
    Non proprio...

    Dichiarare instance statica è corretto, gli altri metodi però non dovrebbero essere statici.

    Inoltre lo scopo del singleton è avere un unica istanza della classe e lavorare sempre su quella. Per fare ciò devi mettere il costruttore privato (in modo che non sia istanziabile dall'esterno).

    La struttura base è quindi

    codice:
    public class DBManager {
      private static class DBManager instance;
      
      private DBManager() { } // costruttore privato
    
      public static DBManager getInstance() {
        return (instance == null) ? (instance = new DBManager()) : instance;
      }
    
      ..
      ..
    
      // metodi non statici
    }
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  6. #6
    vediamo se ho capito:
    codice:
    public class DBManager {
    
        private static DBManager instance = null;
        final static String HOST = "";
        final static String DB = "";
        final static String USER = "";
        final static String PWD = "";
        private static Connection conn = null;
    
        private DBManager() {
        }
    
        public static DBManager getInstance() {
            return (instance == null) ? (instance = new DBManager()) : instance;
        }
    
        public Connection getConnection() throws ClassNotFoundException, SQLException {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection("jdbc:mysql://" + HOST + ":3306/" + DB + "?user=" + USER + "&password=" + PWD);
            return conn;
        }
    
        public void select() throws ClassNotFoundException, SQLException {
            conn = DBManager.getInstance().getConnection();
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery("SELECT * FROM bookv");
            while (rs.next()) {
                String id = rs.getString("book_id");
                String name = rs.getString("name");
                String author = rs.getString("author_name");
                String editor = rs.getString("editor_name");
                String price = rs.getString("price");
                String isbn = rs.getString("isbn");
                String note = rs.getString("note");
                Object[] riga = {id, name, author, editor, price, isbn, note};
                ((DefaultTableModel) Main.getTable().getModel()).addRow(riga);
            }
            rs.close();
            stmt.close();
        }
    // altri metodi nn statici
    }
    poi ad esempio nel mio JFrame:
    codice:
    public class Main extends javax.swing.JFrame {
    
        private DBManager dbman = DBManager.getInstance();
    
    ........
    
    dbman.select();
    così istanzio una volta la classe e poi richiamo i vari metodi dove mi servono.

  7. #7
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Esattamente
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  8. #8
    Originariamente inviato da Alex'87
    Esattamente
    perfetto grazie mille!!

  9. #9
    Volendo fare le cose ancora più pulite puoi usare il pattern DAO (Data Access Object) .
    Di fatto i principali framework per la persistenza di appoggiano a questo pattern (hibernate, ibatis..) ma può (e dovrebbe) essere usato anche lavorando direttamente con JDBC in modo da rendere più indolore possibile un'eventuale migrazione da un DBMS ad un'altro.
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  10. #10
    Originariamente inviato da unomichisiada
    Volendo fare le cose ancora più pulite puoi usare il pattern DAO (Data Access Object) .
    Di fatto i principali framework per la persistenza di appoggiano a questo pattern (hibernate, ibatis..) ma può (e dovrebbe) essere usato anche lavorando direttamente con JDBC in modo da rendere più indolore possibile un'eventuale migrazione da un DBMS ad un'altro.
    si avevo letto qualcosa al riguardo, solo che nn riesco bene a capire come funziona quindi avevo lasciato perdere anche se mi ci vorrei rimettere.
    tu avresti un esempio da postarmi se nn ti dispiace?

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 © 2025 vBulletin Solutions, Inc. All rights reserved.