MVC: ¿Cuál es la diferencia entre un modelo y un servicio?

15

¿Por qué en algunos marcos la capa lógica se llama "Modelo" mientras que en algunos se llama "Servicio". ¿Son diferentes entre sí o simplemente diferentes al nombrar convenciones?


ACTUALIZACIÓN 1

La razón por la que pregunto es porque en Zend Framework, un marco MVC clásico, todos usan el concepto de Modelo. Ahora estoy aprendiendo AngularJS y parece que la palabra Modelo desapareció y fue reemplazada por la palabra servicio.

Lo que noté es que un servicio es más como un singleton que se puede reutilizar una y otra vez (ejemplo: un cliente REST), mientras que un modelo está más relacionado con las manipulaciones de datos que provienen del controlador en el patrón MVC.

Guilhem Soulas
fuente
Compartir su investigación ayuda a todos. Cuéntanos qué has probado y por qué no satisfizo tus necesidades. Esto demuestra que te has tomado el tiempo para tratar de ayudarte a ti mismo, nos salva de reiterar respuestas obvias y, sobre todo, te ayuda a obtener una respuesta más específica y relevante. También vea Cómo preguntar
mosquito
Parafraseando a Shakespeare: lo que hay en un nombre, una rosa con cualquier otro nombre sigue siendo una rosa. Su modelo de aplicación bien puede implementarse como un servicio.
Jwenting

Respuestas:

22

Modelo: campos que pertenecen al objeto, métodos que ayudan a obtener / establecer datos del objeto (un descriptor de acceso de nombre completo que devuelve nombre + apellido)

Servicio: Métodos para realizar operaciones con uno o más modelos, ver 'unidad de trabajo', transacciones, etc.


Employee :: create solo debe tomar un conjunto de datos, realizar la validación del modelo si es necesario y devolver un objeto de empleado.

EmployeeService :: hireEmployee puede crear al empleado, enviarle un correo electrónico de bienvenida, crear un buzón, hacer un sandwich, etc., puede devolver el conjunto de datos o un código de resultado, etc.


Esto también puede afectar la validación:

Validación del modelo: el empleado debe tener una identificación, nombre y apellido y fecha de nacimiento

Validación del servicio: los empleados para el puesto de barman deben ser mayores de 21 años y contar con la aprobación de un gerente.

FMJaguar
fuente
Gracias por el ejemplo muy concreto que ilustra cuán compleja puede ser la lógica de negocios de palabras reales y, por lo tanto, por qué una capa adicional de servicio puede ayudar aparte de la capa modelo.
wlnirvana
3

Según mi experiencia, la capa Modelo dentro del patrón de diseño MVC se refiere a cada componente de software involucrado con la manipulación de datos (POJO, DAO, todo el camino hasta SQL, JDBC, etc.).

Mientras que la capa de servicio es en realidad una adición a MVC:

Sabemos que los componentes de la capa Modelo se invocan dentro de la capa Controlador . Una vez que se construye este último, te das cuenta de que no parece conciso (desordenado con código sucio); el controlador puede no proporcionar detalles adicionales (por ejemplo, formatear parámetros de solicitud antes de llamar a un método DAO que los va a consumir ...). Por lo tanto, puede incluir esta capa adicional, es decir, la capa de Servicio .

Eventualmente, puede incluir su código sucio dentro de métodos estáticos con un nombre significativo, parámetros, etc., lo que daría como resultado una capa de controlador sintética.

Echa un vistazo a este enlace:

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

Mohamed Ennahdi El Idrissi
fuente
1
Así es exactamente como veo la capa de servicio también. Pero luego, la mayoría de las veces, veo que se usa para servir API externa en el modelo de negocio. Ambos escenarios veo válidos. El problema aquí es solo en el choque de la nomenclatura.
burntblark
2

Estructuralmente, estas clases base son las mismas, sin embargo, se utilizan para clasificar diferentes preocupaciones de los niveles de Servicio y Modelo de la implementación de MVCS

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

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

Entonces, si bien las clases base son similares, las clases concretas creadas al extender estas clases base tienen dos propósitos completamente diferentes.

Sagar Awasthi
fuente