Bonsoir à toutes et à tous.

Dans le cadre d'un projet d'études, je dois réaliser une application ayant pour critère principale de respecter une architecture trois tiers.
Si je comprends bien cette notion, une architecture trois tiers comporte une vue, des contrôleurs, un modèle de données, toute indépendante les unes des autres.
La vue : Interface développé par le biais de Swing
Les contrôleurs : Les classes métiers et toutes les classes nécessaire à la manipulation de données.
Le modèle de données : La base de données.

La persistance des données se réalise grâce à l'aide de JPA.
Pour alimenter ma vue, des JTables sont utilisés pour afficher les données métiers. J'utilise des modèles de tables héritant de DefaultTableModel.
Les Jtables sont construites à partir de mon modèle de tables. Ces modèles comportent des List d'objets métiers afin d'assurer la cohérence des données.
Pour récupérer des données Métiers dans mon modèle de table, j'utilise un contrôleur que j’appellerai MetierManager (un pour chacune des classes Métiers) qui vont directement récupérer les données par le biais de MetierDao.

Afin d'alimenter le logiciel en données, j'aimerai que l'utilisateur puisse cliquer sur un bouton "+" afin de créer une ligne vide dans le tableau, qu'il puisse l'éditer, et valider afin de rendre persistante la donnée.
Mes questions sont les suivantes : ai-je bien saisi le concept d'architecture trois-tiers, et est-ce que l'architecture que je propose est conforme à celle-ci.
Je viens à vous car je ne suis pas sur de mon ajout de ligne vide via "addElement" en effet, je ne créé par directement un objet Metier dans mon Modèl de Table, mais la methode fait bien appel à une méthode retournant un objet vide de type Métier.

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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
public class CompartimentManager {
 
 
	public static Compartiment createTempCompartiment() {
		return new Compartiment();
	}
 
	public static Compartiment loadCompartiment(int uid) {
		return CompartimentDao.load(uid);
 
	}
 
	public static List<Compartiment> loadAllCompartiment() {
		return CompartimentDao.loadAll();
	}
 
}
 
 
 
 
public class CompartimentTableModel extends EscrimTableModel {
	private List<Compartiment> listeCompartiment = CompartimentManager
			.loadAllCompartiment();
	private String[] CompartimentColumnName = { "", "Nom", "Hauteur",
			"Longueur", "Largeur", "Volume", "Poids", "uid" };
 
	public CompartimentTableModel() {
		listeCompartiment = CompartimentManager.loadAllCompartiment();
	}
 
	@Override
	public String getColumnName(int columnIndex) {
		return CompartimentColumnName[columnIndex];
	}
 
	@Override
	public int getRowCount() {
		if (listeCompartiment != null) {
			return listeCompartiment.size();
		} else {
			return 0;
		}
	}
 
	@Override
	public int getColumnCount() {
		return 8;
	}
 
	@Override
	public Object getValueAt(int rowIndex, int columnIndex) {
		Compartiment compartiment = listeCompartiment.get(rowIndex);
		switch (columnIndex) {
		case 0:
			return null;
		case 1:
			return compartiment.getNom();
		case 2:
			return compartiment.getHauteur();
		case 3:
			return compartiment.getLongueur();
		case 4:
			return compartiment.getLargeur();
		case 5:
			return compartiment.getVolume();
		case 6:
			return compartiment.getPoids();
		case 7:
			return compartiment.getUid();
		}
		return null;
	}
 
	@Override
	public Class<?> getColumnClass(int columnIndex) {
		switch (columnIndex) {
		case 0:
			return String.class;
		case 1:
			return String.class;
		case 2:
			return Float.class;
		case 3:
			return Float.class;
		case 4:
			return Float.class;
		case 5:
			return Float.class;
		case 6:
			return Float.class;
		case 7:
			return Integer.class;
		}
		return null;
	}
 
	public void addElement() {
		listeCompartiment.add(0, CompartimentManager.createTempCompartiment());
		fireTableRowsInserted(0, getRowCount());
	}
}
Tout n'est pas encore implémenter, et j'ai besoin d'avis plus expert que le mien sur la question pour avancer. Merci d'avance pour vos réponses.

Fayne