Bonjour à tous,

Je souhaite réaliser une petite application en utilisant une architecture MVC. Je suis auto-didacte et très passionné par le développement en Java. Je fais beaucoup de progrès grâce à ce site et aux nombreux tutoriel présent sur Internet. Cependant je trouve peu d'exemple sur le développement d'une application Java MySQL avec une architecture MVC ormi cet excellent tutoriel sur le modèle MVC http://baptiste-wicht.developpez.com...onception/mvc/ assez simpliste mais très difficile à comprendre dans un premier temps pour un novice comme moi.

Mon application qui est des plus basique devra m'afficher tous les "contacts" dans une JTable en fonction du "type de contact" sélectionné dans une JComboBox. J'ai donc séparé mon application en trois partie :
- la vue : il n'y a ici que des composants de la bibliothèque Swing (JComboBox, JTable, ...)
- le modèle : une classe ModelTypeContact et une classe ModelContact représentant les champs de ma BD et une classe de connexion à la BD pour récupéré ces objets sous forme de liste
- le controller : possède une instance de la Vue et du modèle.

Pour l'instant dans mon controller, je cré une nouvelle instance de DefaultComboBoxModel qui est le modèle de ma JComboBox de "type de contact" ainsi qu'une instance de AbstractTableModel qui est le modèle de la JTable des "contacts".
- L'avantage de procéder ainsi est que mon controller connait le type de contact sélectionné dans la liste déroulante grâce à la méthode "getSelectedItem" et me permet ainsi de mettre à jour le modèle de ma table contact.
- L'inconvénient majeur est que mon controller est fortement dépendant de ma vue. Si je souhaite créer une IHM en AWT, je serais obliger de modifier le controller.

L'idée dans mon cas, serait peut être de créer une nouvelle classe dans le modèle héritant de la classe Observable et représentant une liste d'objet de "type contact" avec une propriété mémorisant l'index sélectionné dans la liste.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
 
public class ModelTypeContact implements TypeContactObservable{
   private ArrayList<TypeContactObserver> listObservateur = new ArrayList<TypeContactObserver>();
   private Vector<TypeContact> listTypeContact;
   private int indexTypeContact;
 
   // CONTRUCTEUR
   public ModelTypeContact() {
      this.listTypeContact = new Vector<TypeContact>();
      this.indexTypeContact = -1;
   }
 
 
   // GETTER AND SETTER
   public Vector<TypeContact> getListTypeContact() {
      return listTypeContact;
   }
 
   public int getIndexTypeContact() {
      return indexTypeContact;
   }
 
   public void setListTypeContact(Vector<TypeContact> listTypeContact) {
      this.listTypeContact = listTypeContact;
   }
 
   public void setIndexTypeContact(int indexTypeContact) {
      this.indexTypeContact = indexTypeContact;
 
      fireTypeContactChanged();
   }
 
   // OBSERVER
   @Override
   public void addTypeContactObserver(TypeContactObserver obs) {
      this.listObservateur.add(obs);
   }
 
   @Override
   public void removeTypeContactObserver() {
      this.listObservateur = new ArrayList<TypeContactObserver>();
   }
 
   @Override
   public void fireTypeContactChanged() {
      for(TypeContactObserver obs : this.listObservateur) {
         if (indexTypeContact >= 0 && indexTypeContact < listTypeContact.size())
            obs.serviceChanged(listTypeContact.elementAt(indexTypeContact));
         else 
	    obs.serviceChanged(null);
      }
   }	
}
Ce qui me chagrine ici, c'est qu'après avoir développé une classe "TypeContact", une classe Connexion qui me renvoi une liste d'objet "TypeContact", je dois créer une autre classe qui gère cette liste.

Voila pour le topo, je voudrais savoir si je suis dans la bonne direction et je reste ouvert à toutes vos observations, vos critiques, vos conseils ...

PS : connaissez vous un bon livre avec des exemples concrets sur le développement Java + MySQL utilisant le pattern MVC