MVC e singoli elementi del modello sotto una classe base comune

3

Certamente la mia esperienza nell'uso del pattern MVC è limitata. Si potrebbe sostenere che non separo realmente la V dalla C, anche se tengo la M separata dal VC nella misura in cui posso gestirla.

Sto considerando lo scenario in cui il modello dell'applicazione include un numero di elementi che hanno una classe base comune. Ad esempio, personaggi nemici in un videogioco o tipi di forme in un'app di grafica vettoriale. La vista vuole rendere questi elementi. Ovviamente, le diverse sottoclassi richiedono un rendering diverso.

Il problema è che gli elementi fanno parte del modello. Renderli è concettualmente parte della vista. Ma il modo in cui devono essere resi dipende dai parametri di entrambi:

  • Gli attributi e lo stato dell'elemento sono parametri del modello
  • Le impostazioni utente sono parametri della vista e, per supportare più piattaforme e / o modalità di visualizzazione, è possibile utilizzare diverse viste

Qual è il tuo modo preferito di affrontare questo?

  • Inserisci il codice di rendering nelle classi del modello, passando in qualsiasi parametro di visualizzazione?
  • Inserisci il codice di rendering nella vista, usando un interruttore o simile per selezionare il giusto rendering per il tipo di elemento del modello?
  • Hai alcune classi intermedie come un'interfaccia vista modello, di cui il modello creerà oggetti su richiesta e la vista li renderà poi?
  • Qualcos'altro?
posta Stewart 27.02.2011 - 19:49
fonte

3 risposte

1

Il modello di View Helper è definito nel Catalogo modelli J2EE (orientato al web) , ma è applicabile nella più ampia architettura del software:

A view contains formatting code, delegating its processing responsibilities to its helper classes...Helpers also store the view's intermediate data model and serve as business data adapters.

Nel tuo esempio, "codice di formattazione" sarebbe il codice di rendering specifico dell'elemento.

A helper is responsible for helping a view or controller complete its processing. Thus, helpers have numerous responsibilities, including gathering data required by the view and storing this intermediate model

In termini semplici, fungono da intermediari tra i livelli MVC per risolvere uno specifico "problema" dell'ambito (ovvero la vista non può contattare il modello).

Using helpers results in a cleaner separation of the view from the business processing in an application

Separating formatting logic from application business logic reduces dependencies that individuals fulfilling different roles might have on the same resources

Con questo in mente, torna al tuo esempio. Le dipendenze di un oggetto elemento (ad esempio, gli specifici helper di visualizzazione) dovrebbero essere iniettate in esso. L'oggetto non ha bisogno di sapere quale helper è stato iniettato mentre gli helper si conformano a un'interfaccia.

Quando l'oggetto nemico viene sottoposto a rendering dal View the View Helper viene invocato, che esegue il broker dei dati tra il Modello e la Vista e completa qualsiasi elaborazione ausiliaria. Alla fine, la vista è responsabile della definizione dell'output visivo.

    
risposta data 27.02.2011 - 22:02
fonte
0

Che cosa intendi è questa, la tua app. avere diversi "nemici" che condividono alcune logiche e altre logiche e display differenti.

Esiste un semplice pattern "Model View" o un semplice pattern "Model Presenter", in cui la vista e il presenter vengono usati come entità singola. Non sono riuscito a trovare il link.

Ho visto molti framework, che ti permettono di usare il M.V.C. come un modello, più viste, più controller; ma nella vita reale, il programmatore usa effettivamente un modello, una vista per un controller.

Ad esempio, il gestore di file di Windows (Konqueror, ragazzi di KDE-Linux?) utilizza un singolo modello (il filesystem), due controller (frame della cartella e frame del file).

La cornice della cartella, è lo stesso controller e ha solo una vista. Il frame del file, è lo stesso controller, ma a volte usa "list view", o "icon view" o "mosaic view"

Forse, questo modello potrebbe aiutarti:

link

Spero che ti aiuti.

    
risposta data 17.03.2011 - 22:36
fonte
0
> What's your preferred way of dealing with this?

Avere una sottoview per ogni tipo di elemento del modello che sa come visualizzare questo tipo

    
risposta data 18.03.2011 - 06:43
fonte

Leggi altre domande sui tag