MVC: Qual è la differenza tra un modello e un servizio?


15

Perché in alcuni framework il livello logico si chiama "Modello" mentre in alcuni si chiama "Servizio". Sono diversi l'uno dall'altro o semplicemente diversi dalle convenzioni di denominazione?


AGGIORNAMENTO 1

Il motivo per cui lo sto chiedendo è perché in Zend Framework, un classico framework MVC, tutti usano il concetto di Modello. Ora sto imparando AngularJS e sembra che la parola Modello sia scomparsa e sia stata sostituita dalla parola servizio.

Quello che ho notato è che un servizio è più simile a un singleton che può essere riutilizzato più volte (esempio: un client REST) ​​mentre un modello è più correlato alle manipolazioni dei dati provenienti dal controller nel modello MVC.


Condividere la tua ricerca aiuta tutti. Dicci cosa hai provato e perché non ha soddisfatto le tue esigenze. Ciò dimostra che hai impiegato del tempo per cercare di aiutarti, ci salva dal ribadire risposte ovvie e, soprattutto, ti aiuta a ottenere una risposta più specifica e pertinente. Vedi anche Come chiedere
moscerino il

Per parafrasare Shakespeare: ciò che è in un nome, una rosa con qualsiasi altro nome è ancora una rosa. Il tuo modello di applicazione potrebbe essere implementato come servizio.
jwenting,

Risposte:


22

Modello: campi che appartengono all'oggetto, metodi che aiutano a ottenere / impostare i dati dall'oggetto (un accessore di nome completo che restituisce nome + cognome)

Servizio: metodi per eseguire operazioni con uno o più modelli, vedere "unità di lavoro", transazioni, ecc.


Employee :: create dovrebbe semplicemente prendere una serie di dati, eseguire la convalida del modello, se necessario, e restituire un oggetto Employee.

EmployeeService :: HireEmployee potrebbe creare il dipendente, inviare un'e-mail di benvenuto, creare una cassetta postale, renderlo un sandwich, ecc ... potrebbe restituire il set di dati o un codice di risultato, ecc ...


Ciò può influire anche sulla convalida:

Convalida del modello: il dipendente deve avere un ID, nome e cognome e data di nascita

Convalida del servizio: i dipendenti per la posizione di barista devono avere almeno 21 anni e devono essere approvati da un manager.


Grazie per l'esempio molto concreto che illustra quanto può essere complessa la logica aziendale delle parole reali, e quindi perché un ulteriore livello di servizio può aiutare a parte il livello del modello.
wlnirvana,

3

Secondo la mia esperienza, il livello Model all'interno del modello di progettazione MVC si riferisce a tutti i componenti software coinvolti nella manipolazione dei dati (POJO, DAO, fino a SQL, JDBC e così via).

Considerando che il livello di servizio è in realtà un'aggiunta a MVC:

Sappiamo che i componenti del layer Model sono richiamati all'interno del layer Controller . Una volta costruito quest'ultimo, ti rendi conto che non sembra conciso (disordinato con il codice sporco); il Controller potrebbe non fornire ulteriori dettagli (ad es. i parametri di richiesta di formattazione prima di chiamare un metodo DAO che li consumerà ...). Pertanto, è possibile includere questo livello aggiuntivo, vale a dire il livello di servizio .

Alla fine, potresti racchiudere il tuo codice sporco all'interno di metodi statici con un nome, parametri e così via significativi, che porterebbe a un livello di controller sintetico.

Dai un'occhiata a questo link:

/programming/2762978/the-purpose-of-a-service-layer-and-asp-net-mvc-2


1
Questo è esattamente come vedo anche il livello di servizio. Ma poi, il più delle volte, vedo che viene utilizzato per servire API esterne nel modello di business. Entrambi gli scenari che vedo validi. Il problema qui è solo nello scontro della nomenclatura.
burntblark

2

Strutturalmente queste classi di base sono le stesse, tuttavia vengono utilizzate per classificare una diversa preoccupazione dei livelli Service e Model dell'implementazione MVCS

Service:- A concrete service class defines the API of an external Service.

Model :- Defines the API of the applications data model.

Quindi, mentre le classi base sono simili, le classi concrete create estendendo queste classi base hanno due scopi completamente diversi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.