In un MVC, i modelli dovrebbero usare le librerie o le librerie dovrebbero usare i modelli?

5

Quando creo un'API RESTful, utilizzo un pattern MVC. E per rendere i controller skinny e code riutilizzabili all'esterno dell'API (ad esempio in attività Cron), ho inserito gran parte del mio codice in servizi (comunemente noti come librerie).

I miei router delegano i controller che poi delegano ai servizi, che usano i modelli.

Mi chiedo: ha senso che i servizi utilizzino i modelli? Quindi

router > controller > services > models

Oppure, i modelli dovrebbero utilizzare i servizi? Quindi

router > controller > models > services
    
posta Chad Johnson 09.11.2014 - 21:18
fonte

2 risposte

5

Nel pattern MVC, l'eberything che non fa parte del Controller o della Vista è considerato parte del lato Modello della triade. Ciò significa che da una prospettiva MVC, la tua domanda è discutibile, perché sia il services che il models fanno parte del lato MVC Model della triade.

Poiché la maggior parte dei framework MVC fornisce servizi di accesso ai dati come parte del loro componente Model, che potresti voler utilizzare anche quando accedi al tuo codice dall'esterno dell'API, ha più senso posizionare il tuo strato services tra controller e models .

    
risposta data 10.11.2014 - 11:46
fonte
1

Aiuta a distinguere tra:

  • Aiutanti - codice di supporto che non è a conoscenza del tuo modello, ad es. formattazione della data.
  • Servizi - codice di supporto che è a conoscenza del tuo modello, ad es. fattura la carta di credito, aggiorna la registrazione dell'utente, invia l'email dell'utente

Non sono abbastanza sicuro di quale di questi intendi per "biblioteca". Ad ogni modo, seguendo la tua terminologia, ti suggerisco questa catena:

router > controller > services > models

Il livello di servizio è opzionale: per operazioni semplici il controllore può chiamare direttamente il modello. E tutto può chiamare un aiuto.

Per perfezionare la tua terminologia un po 'di più, puoi modularizzare il modello .

    
risposta data 27.11.2014 - 22:42
fonte

Leggi altre domande sui tag