La question que je vais poser a été inspirée par mon dernier travail avec la plate-forme Flex (et certains frameworks prétendant implémenter MVC), mais je pense que c'est assez général pour impliquer des gens avec des expertises diverses.Où est le M dans MVC?
Pour beaucoup de temps, je l'ai suivi les paradigmes, proposés par des cadres comme Cairngorm -
Voir, lié aux propriétés d'un modèle singleton et événements dispatching. Les événements sont interceptés par le contrôleur frontal et les commandes sont exécutées en conséquence. Les commandes permettent d'appeler des services, d'obtenir des données et de fournir le modèle. Le modèle met implicitement à jour les vues via des liaisons.
Il était tout agréable et son jusqu'à ce que je suis arrivé à la structure de données suivantes:
utilisateur a de nombreux adeptes (utilisateurs) suit de nombreux utilisateurs a un tas de photos suit de nombreux endroits
photo a beaucoup likers (User) dispose d'un emplacement a un créateur a de nombreuses photos liées
Locatio n a de nombreuses photos a de nombreux adeptes
Encore une fois, il ne serait pas un problème à utiliser l'idée proposée par Cairngorm, par exemple d'avoir un currentUser, CurrentLocation et currentPhoto, et juste se lier à eux.
Le problème vient dans les vues elles-mêmes. J'ai une série de vues "page" complexes, qui fournissent des informations comme on pourrait l'imaginer. Par exemple, la page de localisation, montre une grille de photos récentes/populaires, un panneau pour les adeptes, et une carte basée sur les coordonnées où ces photos ont été prises. Voici les problèmes:
Évidemment, pour des raisons de performances, je ne peux pas récupérer tous les utilisateurs qui suivent un emplacement particulier, ou toutes les photos qu'un emplacement pourrait avoir. J'ai pré-récupéré certains, et d'autres seront fournis par le serveur à la demande. Je veux descendre en restant sur la même vue, par exemple en cliquant sur la page avatar d'un suiveur, je devrais obtenir une petite grille des photos de cet utilisateur, ou sth. Mais je n'ai qu'un currentUser dans le modèle. Cela conduit à la question suivante: pourquoi ai-je même besoin de me lier à un modèle singleton central? Je ne peux pas simplement transformer chaque vue en un sorte de répondeur, c'est-à-dire que la vue distribue encore une fois, mais cette fois la commande au lieu de fournir le modèle fournira directement la vue de l'appel.
Il n'y aura pas de couplage car chaque vue implémentera IResponder. La commande nécessitera seulement un IResponder, qu'il obtiendra de l'événement avec lequel il a été appelé.
Le "modèle" tel que je le vois, jouera un rôle différent. Ce sera plus comme un cache, sorte de dictionnaire global pour le stockage local, qui sera vérifié par la commande avant de faire une requête au serveur. De cette façon, il peut enregistrer certains appels au serveur, bien que, si les données sont très sporadiques, ces mêmes données seront récupérées encore et encore avec d'autres données.(Je peux avoir des données d'utilisateur dans le cache, mais en général j'appelle le serveur pour une collection de données suiveuses, peu importe si j'en ai déjà ou non, pour la cohérence)
idées seront appréciés
C'est au début. * rimshot * – jhocking
Veuillez vous abstenir ici. – Oded
Je ne me déchaîne pas, je suis juste vraiment curieux – user802232