Contenitore sottostante in Visualizza o Modello in MVP

0

Implementazione di un'app di finanza e una delle domande che emergono è dove conservare un contenitore sottostante? Al momento ho attualmente queste classi:

class DataGrid : public View { /* widget stuff */
class Presenter { /* handle DataGrid interaction and update model */ }

class Accountant : public Model
{ 
/* Model for entire application */
private:
    std::vector<Account*> mAccounts;  // QUESTION: HOW DO I KEEP THIS SYNCED IN DATAGRID?
};

class Account : public Model
{
private:
    std::vector<Transaction*> mTransactions;
}

class Transaction : public Model { /* Another model class */ };

La mia domanda è: come posso mantenere sincronizzati i contenitori sottostanti nei modelli (Contabile, Conti, Transazioni)? Ho un contenitore in DataGrid e nei modelli? O ho solo i contenitori nei Modelli e in qualche modo ottengo un riferimento ad essi nel datagrid (vista)?

    
posta keelerjr12 14.06.2017 - 00:01
fonte

1 risposta

1

Se sto capendo correttamente la tua domanda, stai chiedendo come mantenere l'interfaccia utente al passo con il modello? Il tuo modello potrebbe cambiare con altri componenti dell'interfaccia utente o internamente e hai bisogno che tutti i componenti dell'interfaccia utente riflettano lo stesso modello?

Il schema di osservazione viene in genere utilizzato per questo scopo. Ogni componente dell'interfaccia utente è un osservatore del modello e ogni volta che il modello cambia tutti gli osservatori vengono avvisati in modo che possano riflettere le modifiche sul modello. Il presentatore in MVP dovrebbe essere quello che contiene una raccolta di osservatori e notifica agli osservatori quando il modello cambia.

Ad esempio, potresti avere un'interfaccia per l'osservatore:

interface ObservesAccount {
    def onTransactionAdded(transaction: Transaction)
}

Implementerai questa interfaccia in DataGrid :

override def onTransactionAdded(transaction: Transaction) =
    // add row to grid in correct location per transaction date

Avresti una raccolta di ObservesAccount in Presenter

private accountObservers: Vector<ObservesAccount>

E ogni volta che viene aggiunta una transazione, Presenter eseguirà iterazione su accountObservers e invocherà onTransactionAdded() su ciascuno.

    
risposta data 14.06.2017 - 00:34
fonte

Leggi altre domande sui tag