Bonjour à tous, Je suis confronté à un sérieux mal de crâne concernant le modèle de Pollen 1.3. Bien trop complexe pour être exploitable et maintenable (comme les services métiers). Je pense qu'il serait préférable, et moins couteux en temps de tout refaire le module business de l'application en supprimant au passage les DTO. Il faudra dans un deuxième temps adapté/amélioré l'UI pour coller au nouveau modèle, ce qui ne devrait pas être compliqué car ce dernier est mieux adapté aux besoins. Donc, la v1.3 ne verra jamais le jour, je pense directement partir sur un nouveau modèle donc une v2.0. Ceci dit, les modèles risquent d'être incompatible et donc un script de migration bien trop complexe à mettre en œuvre. Le mieux serait d'utiliser le moteur d'import/export XML pour passer du modèle 1.2 actuel au 2.0. Cordialement, Florian Desbois Code Lutin Ci-joint une première ébauche du modèle de la v2.0. Petite description du modèle : ------------------------------ Rappel : UId = identifiant unique permettant de voter ou d'identifier un sondage. - Côté sondage (Poll) rien ne change, les attributs restent les mêmes ainsi que le lien vers les choix, les commentaires, les résultats et les règles de notifications (PreventRule). - Côté vote et personne (PollAccount), il y a pas mal de changement. Un PollAccount devient soit une liste, soit une personne. PollAccount *********** Le PollAccount représente un votant (ou groupe de votants) pour un sondage donné. Un PollAccount ne sera JAMAIS lié à plusieurs sondages. Le PollAccount est utilisé dans deux contextes différents : Liste de favoris d'un utilisateur enregistré ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - L'utilisateur est lié à un ou plusieurs PollAccount listes (list = true). Chaque liste représente une liste de favoris contenant des pollAccount (l'UId de chacun d'eux ne sera défini que dans le cadre du sondage). La création d'un sondage avec une liste de favoris copiera cette dernière pour la lier au sondage et générer les UId nécessaires aux votes. relation UserAccount -> * PollAccount - L'utilisateur est lié à plusieurs PollAccount personnes (list = false) qui correspondent à des instances de lui même pour chaque sondage participé ou créé. relation PollAccount -> 1 UserAccount Compte de vote pour un sondage (restreint ou non) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Cas sondage Libre : Le sondage est lié à plusieurs PollAccount personnes (list = false), chaque PollAccount correspond à un votant et son vote. Le sondage ne contiendra que des gens qui ont réellement votés (dateVote != null) - Cas sondage Restreint : Le sondage est lié à plusieurs PollAccount personnes (list = false) bien définis. Chaque personne aura déjà voté ou non. Seul le créateur du sondage pourra rajouter ou modifier l'ensemble des PollAccount liés au sondage. - Cas sondage Par groupe : Le sondage est lié à plusieurs PollAccount listes (list = true) contenant chacune un ensemble de PollAccount personnes. Il sera ainsi possible de sauver le résultat des votes par groupe. Créateur du sondage ******************* Le créateur du sondage est lui même un PollAccount particulier (admin = true). Idée : Il pourrait être intéressant pour un sondage restreint d'avoir l'option dans l'UI: "m'inclure automatiquement à la liste de votants". Si cette case est coché, le créateur devra voter, sinon il ne sera pas nécessaire de l'inclure dans le dépouillement. Sinon gérer le test sur les emails dans la liste et celui du créateur pour l'inclure au vote en tant que votant. Prévoir un nouvel attribut dans PollAccount ? Cas de l'anonymat ***************** - Les propriétés de PollAccount : email, name et userAccount sont mises à null + booléen anonymous passé à true -> impossible de retrouver la personne qui a voté. - La seule garantie d'unicité du vote est l'UId du PollAccount. Il est donc préférable de l'afficher à l'utilisateur au moment de son vote anonyme pour qu'il puisse le modifier. Pour un sondage restreint/par groupes il possédera déjà l'UId depuis le mail qu'il aura reçu. Résultats ********* - Le moteur de dépouillement (voteCounting) sera gardé tel quel. Le nouveau business communiquera avec lui avec la couche DTO/bean du module voteCounting. - Les résultats continus seront désormais enregistrables dans le modèle.