2010-09-08 5 views
4

J'ai écrit une application Java Swing centrée sur la base de données pendant un certain temps.Comment une application Java Swing orientée base de données doit-elle être conçue?

L'interface graphique et DAO code se termine dans un grand arbre comme:

JFrame 
    | 
JTabbedPane 
    | 
    +--------------------+----------------------+-------------+ 
    |     |      |    | 
JPanel1    JPanel2    JPanel3  JPanel4 
    |     |      |    | 
JButtons--JTable1 JTextFields--JButton  JTable2 JDialog--JTable3 
      i!   i!     i!     i! 
      Model1  Model2    Model3    Model4 
      |   |      |     | 
      +------------+-----------+---------+-------------------+ 
             | 
           DataAccessObject 

L'application dispose de plusieurs vues, certains contient une JTable pour montrer des données, et certains contiennent une boîte de dialogue avec un formulaire pour l'édition ou ajouter des données. Je possède un DataAccessObject avec une connexion JDBC. J'utilise plusieurs modèles (étend AbstractTableModel) pour connecter les vues (formulaires ou tableaux) avec le DAO. Dans ma première version, j'ai implémenté le DAO en tant que Singleton, puis j'ai appris qu'il s'agit d'une Injection de Dépendances et d'Injections à la place, donc j'initialise d'abord le DAO puis je l'injecte au constructeur de tous les modèles. . Ensuite, j'initialise le JFrame et j'injecte une référence aux modèles dans le constructeur dans l'arbre GUI du trou. Passer la référence aux modèles à travers l'arbre GUI trou se sent très maladroit, mais je sais que j'ai un bon contrôle des dépendances. Mais y a-t-il une meilleure conception que je pourrais utiliser pour des applications Java Swing centrées sur la base de données avec de nombreuses vues de données nécessitant un modèle avec une connexion à la base de données?

+6

Vous allez devoir séparer votre vue de vos données. En fait, je vous recommande d'oublier une interface graphique et de créer un système qui gère une base de données et fournit les services et fonctionnalités que vous désirez. Une fois que vous avez cela, vous pouvez créer une interface graphique en utilisant Swing qui va maintenant utiliser votre nouveau système. C'est tout sur les couches d'abstraction ... –

+2

Exactement ainsi .... + 1 de moi. – duffymo

+0

@Shakedown: N'est-ce pas ce que j'ai fait avec mon design, où seuls les modèles accèdent au DAO? Ou avez-vous un lien ou un exemple avec ce que vous voulez dire? – Jonas

Répondre

1

Je voudrais également soutenir le commentaire de Shakedown. Tout est une question de couches. Séparez votre code en couches/niveaux. Puisque vous parliez de l'injection de dépendance, je vous suggère de jeter un coup d'oeil à la structure Spring Rich Client pour avoir une idée de la façon dont les bonnes applications Swing peuvent être conçues/développées.

Questions connexes