Séparation de la vue et du contrôleur #55

Closed
opened 2021-05-17 13:02:20 +02:00 by Jep · 4 comments
Owner

Actuellement aucune réflexion de design n'a été faite.
Seule la partie modèle est séparé par la force des choses avec la base de données.
Mais la logique du jeu (le contrôleur) et la vue (activité, bouton, fragment) sont mélangés.

Plusieurs information nécessite une séparation.
Un objet Story qui contient la logique de l'histoire (takeLead etc.) et qui accède à la base de données elle même.

Un objet (À réfléchir encore) pour contenir les données du MainUser, son username récupéré partout inutilement etc.

La vue ne peut utiliser le modèle directement que pour lire les données. Voir MVC modèle:
https://fr.wikipedia.org/wiki/Mod%C3%A8le-vue-contr%C3%B4leur

image

Actuellement aucune réflexion de design n'a été faite. Seule la partie modèle est séparé par la force des choses avec la base de données. Mais la logique du jeu (le contrôleur) et la vue (activité, bouton, fragment) sont mélangés. Plusieurs information nécessite une séparation. Un objet Story qui contient la logique de l'histoire (takeLead etc.) et qui accède à la base de données elle même. Un objet (À réfléchir encore) pour contenir les données du MainUser, son username récupéré partout inutilement etc. La vue ne peut utiliser le modèle directement que pour lire les données. Voir MVC modèle: https://fr.wikipedia.org/wiki/Mod%C3%A8le-vue-contr%C3%B4leur ![image](/attachments/c5f3a6b8-6248-4b8e-ba70-1fbde4a64a51)
Jep added this to the JPD V1.3 milestone 2021-05-17 13:02:20 +02:00
Jep self-assigned this 2021-05-17 13:02:20 +02:00
Jep added this to the V1.3 project 2021-05-17 13:02:20 +02:00
Jep referenced this issue from a commit 2021-05-19 00:07:15 +02:00
Author
Owner

Après ce commit la gestion de la Story est pas mal.
Toute la story est chargée et on dispose d'une bonne callback où faire les mise à jour de la vue à chaque changement. L'objet Story encapsule l'objet DbStory et la logique de la Story (exemple takeALead)

Ce qui reste à voir est la gestion des sentences.
Par exemple pour éditer une sentence, il faut en deux temps, récupérer la sentence, puis la set. Les get posent problèmes car demande une requête serveur et la gestion d'un listenner. Voir si on peut faire plus simple et déléguer un maximum de chose à la Story.

Il faut créer le même type d'objet pour la sentence. Elle peut être créée et renvoyée par la Story ou pas. Pour l'édition on disposerait ainsi de la callback comme pour la story pour faire les traitement à la mise à jour. Voir comment arrêter l'abonnement à la callback.

Après ce commit la gestion de la Story est pas mal. Toute la story est chargée et on dispose d'une bonne callback où faire les mise à jour de la vue à chaque changement. L'objet Story encapsule l'objet DbStory et la logique de la Story (exemple takeALead) Ce qui reste à voir est la gestion des sentences. Par exemple pour éditer une sentence, il faut en deux temps, récupérer la sentence, puis la set. Les get posent problèmes car demande une requête serveur et la gestion d'un listenner. Voir si on peut faire plus simple et déléguer un maximum de chose à la Story. Il faut créer le même type d'objet pour la sentence. Elle peut être créée et renvoyée par la Story ou pas. Pour l'édition on disposerait ainsi de la callback comme pour la story pour faire les traitement à la mise à jour. Voir comment arrêter l'abonnement à la callback.
Jep referenced this issue from a commit 2021-06-02 15:12:01 +02:00
Author
Owner

Les fonctions qui font un seul set dans la base de données sont maintenant faciles à utiliser et à créer.

Le problème n'est pas résolu pour pushSentenceQuery qui non seulement fait plusieurs set mais fait aussi des lectures. Le StoryHelper.setSentence ne peut pas retourner un Task (firestore) facilement en tout cas.

Les fonctions qui font un seul set dans la base de données sont maintenant faciles à utiliser et à créer. Le problème n'est pas résolu pour pushSentenceQuery qui non seulement fait plusieurs set mais fait aussi des lectures. Le StoryHelper.setSentence ne peut pas retourner un Task (firestore) facilement en tout cas.
Author
Owner

pushSentenceQuery allait trop loin dans le traitement, c'était à Story de le faire.

Factorisation de la classe Task pour utiliser la même dans Story et Sentence.
Création d'une classe mère pour Story et Sentence, Model.
Solution pour le get, en asynchrone, qui permet de récupérer la task de l'initialisation seulement.

pushSentenceQuery allait trop loin dans le traitement, c'était à Story de le faire. Factorisation de la classe Task pour utiliser la même dans Story et Sentence. Création d'une classe mère pour Story et Sentence, Model. Solution pour le get, en asynchrone, qui permet de récupérer la task de l'initialisation seulement.
Author
Owner
Question postée sur stack overflow par Jep: https://stackoverflow.com/questions/67829118/how-to-use-a-callback-in-specific-thread-in-order-to-wait-for-it-in-the-main-thr/67847276#67847276
Jep closed this issue 2021-06-17 12:50:37 +02:00
Sign in to join this conversation.
No description provided.