2009-02-23 7 views
4

J'ai un ui qui ressemble à ceci:Modèle MVP: faut-il découpler plusieurs présentateurs ou peut-il communiquer directement?

+--------+---------------+ 
    | model1 | model details | 
    | model2 |  here,  | 
    | model3 | loaded as the | 
    |  | user selects | 
    |  | a model from | 
    |  | the left. | 
    |  |    | 
    +--------+---------------+ 

J'utilise le MVP pattern pour conduire ce ui. Je simplifie beaucoup ici, mais pour diviser pour régner je voudrais diviser le Presenter en deux: un qui gère les gestes de l'utilisateur dans la vue sur la gauche (l'utilisateur change la liste des modèles dans cette vue , par exemple tri) et un autre présentateur qui gère les gestes de l'utilisateur dans la vue sur la droite (l'utilisateur change le modèle individuel dans cette vue). Pendant que le présentateur de gauche interagit avec la liste complète des modèles, le présentateur de droite interagit avec un seul modèle: celui que l'utilisateur sélectionne dans la liste de gauche. IOW l'ui est conduit de gauche à droite.

Après que l'utilisateur choisit (c.-à-clics) un modèle à gauche, mon implémentation actuelle ressemble (à peu près):

LeftPresenter.onModelClick = function(event) { 
    var model = this.getModelFromEvent(event); 
    this.view.setSelectedModel(model); // updates list widget on left 
    RightPresenter.setSelectedModel(model); // notify the other Presenter 
} 

RightPresenter.setSelectedModel = function(model) { 
    // lazy load the model from the db, and update the 
    // view when the model fires the "loadComplete" event 
    model.bind('loadComplete', this.view.setModel); 
    model.lazyLoad(); 
} 

Voici la partie que je suis floue sur WRT le modèle MVP, ou tout Motif MVC GUI d'ailleurs:

  1. Est-ce qu'un ui peut être piloté par plusieurs présentateurs de ce type?
  2. Les diffuseurs multiples doivent-ils être découplés ou peuvent-ils communiquer directement entre eux comme indiqué ici?

Ma question se résume à: quelle est la meilleure façon d'indiquer RightPresenter que l'utilisateur a sélectionné un modèle en vue de l » LeftPresenter?

Répondre

1

1. Est-ce qu'un ui peut être piloté par plusieurs Les présentateurs comme ceci?

Oui

2. Si plusieurs présentateurs être découplés ou peuvent-ils communiquer directement les uns aux autres comme indiqué ici?

La façon dont je débrouille que j'ai un cadre qui ressemble à ceci

Lorsqu'un événement se produit le UI_Object gérer l'événement et la création d'un objet de tir de commande. Chaque UI_Object implémente une interface de vue trouvée dans UI_Views et s'enregistre avec UI_View. Les objets de commande peuvent accéder à l'objet UI enregistré dans UI_View via les interfaces. Par exemple, dans une de mes applications de coupe de métal, il y a un élément d'écran appelé HOLD qui contient toutes les parties qui n'ont pas été placées sur une feuille de métal pour la coupe. Une partie peut entrer en attente de plusieurs façons. Chargé à partir d'un fichier pièce, créé par un éditeur de formes, créé par notre écran CAO, ou récupéré d'une feuille de métal.

Chacune de ces opérations est encapsulée dans des objets de commande distincts mettant en œuvre le modèle de conception de commande. Lorsque l'objet de commande exécute les appels.Chacun de ceux-ci actualisera l'écran respectif mettant à jour la mise en attente.

Maintenant, je pourrais ajouter une méthode à mon interface d'application. MyCuttingApplication.HoldRefresh qui à son tour appelle les trois actualisations.

Mais le point important est que votre vue appelle une commande qui utilise l'interface implémentée par la vue pour la mettre à jour. Que l'objet vue s'enregistre dans une couche inférieure.

Questions connexes