Dividi una grande classe nelle sottoclassi

1

Ho una domanda generica e non capisco come creare ciò che voglio. Scrivo un programma di base in cui possono accedere a un database e fare alcune richieste SQL, ecc. Ma al momento ho una grande classe con tutti gli SQL per tutte le tabelle dal database. E voglio scivolare questa classe in classi diverse per rendere il codice più facile da leggere e implementare le cose. Penso che la soluzione migliore sia creare una sottoclasse per ogni tabella sul database e su questa classe inserire tutti i metodi relativi a questa classe. Ma più tardi non capisco come posso chiamare questo metodo dalla classe. Perché per l'accesso al database creo un oggetto DataBase sull'applicazione principale e se voglio chiamare un metodo faccio solo un database.methodIWant() .

Al momento ho:

  • DataBase (questa classe ha tutti i metodi per i database) estende DataBaseUtil

  • DataBaseUtil (questa classe contiene tutti i metodi e le informazioni per la connessione al database)

e io crate l'oggetto del database con DataBase db = new DataBase();

E voglio qualcosa del tipo:

  • DataBase (questa classe ha tutti i metodi per i database) estende DataBaseUtil

  • DataBaseUtil (questa classe contiene tutti i metodi e le informazioni per la connessione al database)

e classi per esempio:

  • DogSQL (tutti i metodi per il cane da tavolo sul database)

  • CatSQL (tutti i metodi per il gatto tabella sul database)

e creo l'oggetto database con DataBase db = new DataBase(); e chiamo metodi come db.methodFromDogSQL();

Non capisco come farlo. Non capisco se un bisogno usi astratto, interfaccia, ereditarietà per questo o quale sia la migliore implementazione per questo. Sto iniziando e la mia conoscenza di java è un po 'di base, quindi voglio imparare come fare questo tipo di cose.

    
posta Jota_sk 18.04.2015 - 21:26
fonte

2 risposte

1

Non c'è bisogno di usare le classi sub qui, Dog and Cat non dovrebbe essere derivato da Database (in effetti, questo risulterebbe in un tipico esempio di come not per utilizzare l'ereditarietà).

Invece, potresti avere i metodi Crea / Leggi / Aggiorna / Elimina delle classi Dog o Cat solo un parametro di tipo DataBase (o IDataBase , un'interfaccia, se vuoi essere in grado di deridere l'oggetto del database per il test). Ad esempio, non ci dovrebbe essere un metodo in DataBase come db.SelectDog(int Id) , solo un metodo (forse statico) nella classe Dog come Dog.Select(IDatabase db, int Id ). Questo metodo potrebbe restituire un oggetto Dog , che corrisponde a una riga nella tabella Dog.

Il metodo "Dog.Select" potrebbe contenere il codice SQL necessario e chiamare alcuni metodi generali di IDataBase per selezionare i dati, ma in nessun modo la classe del database deve avere conoscenze circa gli SQL necessari per specifici oggetti di business.

    
risposta data 18.04.2015 - 22:28
fonte
0

Ti suggerisco di studiare Inversion of Control e il pattern di iniezione delle dipendenze. Dai un'occhiata a questo articolo di Martin Fowler sull'iniezione di dipendenza . L'utilizzo di un contenitore IoC ti aiuterà a suddividere la tua classe in componenti più gestibili e rendere la tua soluzione meno fragile di quanto non sia ora.

    
risposta data 18.04.2015 - 22:09
fonte

Leggi altre domande sui tag