2010-11-11 4 views
6

Sto costruendo un'applicazione MVC e sono la progettazione di un modello personalizzato legante per una classe; In sostanza uno dei campi del modello è un oggetto che esiste nel database, ma si sta rivelando molto difficile associare questo con gli oggetti appropriati in HTML. (Dal momento che una lista di selezione mi permetterà di scegliere solo un campo int/string, non posso davvero memorizzare un 'oggetto' come 'valore' di una lista di selezione).È possibile che Model Binder esegua una ricerca di repository?

Stavo pensando di usare l'ID memorizzato in un elenco di selezione per ricerca l'oggetto nel mio database nel mio modello Binder - ma un mio collega mi ha detto che questo era generalmente una cattiva idea. È vero, e se sì, quali altre opzioni ho?

+0

fatto del tuo collega dire perché sarebbe una cattiva idea? –

+0

Hanno detto che stava rompendo le 'regole' di 'separazione degli interessi' di MVC ideologia. – Ciel

+0

* Loro *? Chi sono* ? :) –

risposta

7

sembra una questione soggettiva, ma penso che sia accettabile per chiamare il repository nel legante. Il mio backup è l'eccellente libro MVC in Action 2. Hanno una breve sezione su Model Binders. Di seguito è riportato citazione che discute l'idea di chiamare il database nel legante (enfasi aggiunta):

maggior parte del tempo, questo parametro azione è la chiave primaria dell'oggetto o di un altro identificatore univoco, così invece di mettere questo codice di accesso dati ripetuto è possibile utilizzare un modello personalizzato che può caricare l'oggetto memorizzato prima che l'azione venga eseguita. La nostra azione può poi prendere il tipo di oggetto persistente come un parametro al posto del unica identificativo.

Il che ha senso quando si pensa che l'intero punto del raccoglitore modello rappresenti la propria vista sul modello di dominio sottostante. Il loro codice di esempio dimostra anche le chiamate al repository nel raccoglitore.

+0

Grazie. Questo aiuta un po '. Sapevo come farlo, ma sapere che anche altri lo stanno praticando lo rende molto più facile da giustificare. Il mio collega ha affermato che si trattava di "cattive pratiche" e renderebbe il codice più difficile da mantenere (cosa che non comprendevo ... dal momento che sembrava sarebbe stato più semplice) – Ciel

+0

E riguardo l'iniezione di dipendenza nel raccoglitore modello personalizzato? Non penso sia possibile, vero? – autonomatt

+0

è possibile effettuare una chiamata nel dependencyresolver in mvc3 per questo – drogon