Bonsoir à tous ceux qui n'ont pas la chance d'être en vacances

Je travaille sur un programme en architecture MVC (java SE - desktop) et j'ai un soucis par rapport à une classe en particulier. C'est ma classe PersonListModel. Elle contient une liste de personnes ainsi que le numéro de l'indice sélectionné (donc de la personne sélectionnée).

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
public class PersonListModel extends AbstractModel {
...
  protected ArrayList<PersonData> personInfo;
  private int selectedPersonIndex;
... 

  public PersonData getSelectedPerson() {
      if (selectedPersonIndex != NO_SELECTED_PERSON) {
          return personInfo.get(selectedPersonIndex);
      }
      else {
          return null;
      }
  }

...

    // On lui passe le chemin contenant les fichiers de ressource
    // et le constructeur de PersonData va faire un parse des resources
    // pour récupérer les infos relatives à la personne.
    public void addPerson(String _destPath) {
        personInfo.add(new PersonData(_destPath));
        selectedPersonIndex = personInfo.size() - 1;
        notifyObservers();
    }

....
}
et la classe PersonData contient toutes les infos relatives à la personne (nom, prénom, age, adresse, entreprise, etc.).

Dans ma classe PersonListModel, j'ai plusieurs classes qui manipulent les données relatives aux personnes comme l'ajout d'une nouvelle personne, la suppression, le changement de personne sélectionnée, etc. A chacune de ces méthodes, j'ai bien un notifyObserver() pour avertir mes vues du changement de données.

Le contrôleur (PersonListController), là au milieu, se charge uniquement de vérifier si le chemin est correct, l'indice à sélectionner est valide, etc.

Tout fonctionne très bien, excepté un détail important.

Si le programmeur fait quelque part dans le code un :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
personListModel.getSelectedPerson().setName();
alors ça va court-circuiter mon modèle puisque ça va directement modifier le nom de la personne sans passer par mes méthodes set du modèle et donc pas de notify !!

J'ai vu dans plusieurs séquences de code sur le web que la liste de personnes devrait plutôt être gérée dans le PersonListController. Mais là aussi j'ai essayé de coder quelques choses du style mais ça me semble encore pire.

Est-ce que qqn pourrait m'aiguiller et me dire quel est le problème dans mon architecture ? Ou comment structurer différemment ?

Merci beaucoup d'avance.