I servizi dovrebbero essere utilizzati in un ViewModel

0

Quindi ho un servizio che viene iniettato nel mio controller tramite l'iniezione di dipendenza. Posso usarlo nel controller più volte per convertire un valore quando si assegna a una particolare proprietà in un ViewModel. Oppure potrei passare un'istanza del servizio al ViewModel nel costruttore e usarlo nel setter della proprietà (C #). Quale sarebbe il modo migliore?

Mi sento come se il modo di setter fosse il più mantenibile. Tuttavia, non voglio inquinare il ViweModel. Non sono sicuro di aver infranto le migliori pratiche qui.

    
posta Jim Layhey 03.08.2018 - 05:36
fonte

1 risposta

1

So I have a service which is injected in my controller via dependency injection

Come descritto, sembra una cosa strana da fare. Il Controller dovrebbe avere accesso a un Modello, idealmente tramite iniezione come si sta facendo. Quel modello potrebbe utilizzare un servizio, ma il controllore non dovrebbe accedere direttamente a un servizio.

Il controller chiama alcuni aspetti del modello, SomeModel.DoSomething() . Quindi interrogherà il modello per ottenere lo stato corrente, costruendo un oggetto con valore semplice, ViewModel, che poi passerà alla vista.

Certo, sto leggendo molto in una sola frase. È possibile che questo "servizio" sia il tuo modello.

I feel like the setter way would be the most maintainable. However, I don't want to pollute the ViweModel. I'm not sure if I am breaking any best practices here.

L'unico scopo di ViewModel è quello di esporre semplicemente i dati necessari alla vista. In che modo questo è davvero solo un dettaglio di implementazione. Fintanto che espone solo i dati necessari tramite proprietà di sola lettura, si adatta al brief di un ViewModel. Se il modo più semplice per farlo è iniettare il Modello (o il servizio nel tuo caso) in esso e lasciarlo elaborare per ottenere i dati, quindi personalmente non vedo alcun problema.

    
risposta data 03.08.2018 - 09:24
fonte