Associazione dati quando la vista è diversa dal modello

1

Ho un'entità Customer . Il cliente ha una raccolta di Accounts . Ho lezioni corrispondenti. La classe Customer ha-a List<Accounts> .

Ho due punti di vista. La prima pagina mostra il nome, l'indirizzo del cliente, ecc. Ogni campo è associato ai dati alla proprietà corrispondente sull'oggetto Cliente. C'è un link show-account. Facendo clic su quel collegamento, ottieni una seconda vista. Esiste una griglia che è associata ai dati alla proprietà Accounts sull'oggetto cliente.

Ora devo fornire un'etichetta No-of-accounts sulla prima vista. Il problema è che non esiste una proprietà di questo tipo sull'oggetto business Customer . Ho qualche approccio per farlo, ma non mi piace nessuno dei due.

  1. Aggiungi una proprietà AccountCount su Customer oggetto. Ma è artificiale. Cosa succede se domani ho bisogno di mostrare il Balance nell'account più alto?

  2. Utilizza la proprietà Count nell'elenco Accounts . Ma questo ha bisogno che la lista venga popolata. I miei utenti raramente visualizzano l'intero elenco di account. Non vedo il punto di caricare l'intera tabella degli account solo per mostrare il conteggio.

  3. Una volta completata l'associazione dati, effettua una chiamata separata dall'interfaccia utente direttamente a livello dati. Lascia che una query recuperi solo i dettagli. Ciò sconfigge l'intera architettura a strati / stanco. Presto tutto cade nel caos, con tutti che mantengono questo codice attivando le proprie query.

  4. Piuttosto che associazione dati al modello di business Customer , posso eseguire il bind dei dati su una classe CustomerViewModel . Questa classe può avere la proprietà CountOfAccounts artificiale. Ciò mantiene il codice specifico dell'interfaccia utente separato dalla BL. Il problema è che la classe ViewModel dipende dal livello BO, ma BO non ha quella proprietà. Possiamo compilare la lista Accounts e recuperare il conteggio da lì, ma il recupero di una tabella per ottenere solo il Count sembra eccessivo.

Domanda

Che cosa posso fare quando la mia interfaccia utente desidera qualcosa di diverso dal modello aziendale?

    
posta inquisitive 11.04.2015 - 11:36
fonte

1 risposta

2

Quello che stai cercando è il concetto di un ViewModel.

Questo è un oggetto che contiene solo i dati a cui è interessata la vista e che molto spesso non è un mapping 1 a 1 con un modello aziendale o di dominio. Potrebbe essere una versione ridotta di un modello di business, potrebbe essere una fusione di più modelli di business diversi.

Se la tua vista ha bisogno di un conteggio, questo può essere rappresentato nel ViewModel. Se la vista deve anche visualizzare tutti gli account, il conteggio può essere estratto da ViewModel.Accounts.Count () (o qualsiasi altra sintassi per la tua lingua).

Se la vista non ha bisogno dell'elenco degli account, allora avrebbe senso avere l'account rappresentato da una proprietà "Numero di account" (o qualsiasi nome che ti piace).

    
risposta data 11.04.2015 - 12:26
fonte

Leggi altre domande sui tag