Sigamos con la clase servis, la clase de servicio que se encarga de trabajar con los datos, de operar.
Todo lo que es lógica negocio.
Bueno, por lo general un servis es una fachada a los objetos daho de acceso a datos, por ejemplo,
que realicen consultas y operaciones en las tablas del asiento independiente.
Si estamos utilizando por ejemplo JBS o algun@ o R.M.
Como Vernet con JPA, effi da lo mismo, pero que acceden a los datos que realizan consultas operaciones
para implementar un CRUD.
Pero un servis podría tener un atributo de un dado o varios atributos, es decir, varios y estos dados
podrían interactuar bajo una misma transacción en un método.
Pero bueno, la cosa es que vamos a ver en el curso la idea ahora a partir de simple con un ejemplo
para explicar la inyección dependencia de qué se trata este patrón?
Pero bien, en esta clase primero vamos a partir sin inyección dependencias para que vea la diferencia
y cómo se acopla.
Por ejemplo, esta clase servis cuando no usamos inyección de dependencia ni tampoco interface.
Cómo se acopla al controlador?
Lo primero en Models vamos a crear otro package.
Veamos, se llama Servicie Service dentro de Models.
Finalizar perfecto.
Y acá vamos a crear nuestra clase.
Mi servicio o el nombre que queramos.
Listo.
Finalizamos.
Bien, por ahora algo simple.
Después acá vamos a anotar, por ejemplo con component o servis.
Bueno, después lo vamos a ver para que sean componentes Brink sea manejado por el framework, por el
contenedor y lo podemos inyectar, pero por ahora no vamos a usar intución de Pnce.
Por lo tanto, tampoco lo vamos a notar.
Solamente una clase con un método, un método o alguna operación.
Bueno que retorna un string por ahora algo simple pero bien en un proyecto real con base dato.
Por ejemplo para implementar un crup métodos del servis.
Bueno, típicamente van a ser, por ejemplo para listar, para guardar, para eliminar, para modificar,
para filtrar por nombre.
En fin, iba a retornar una lista de objetos o bien un objeto que esté mapeado alguna tabla, una entity
un poco, pero por ahora.
Bueno, un string, algo simple.
Y después, más adelante en el curso vamos a trabajar con bases de datos y vamos a implementar los servi
con un CRUD con objeto mapeado a tablas en.
Por ejemplo, ejecutando un proceso importante, no sé de lógica, negocio, relación a los datos,
en fin.
Y otro tema importante, el servis.
Bueno, por lo general interactúa con datos que acceden a los datos que trabajan con pasearlos, pero
también un servicio podría comunicar mediante API rest utilizando un cliente http como rest template
para obtener los datos desde otro servicio.
Por ejemplo, en una arquitectura de micro servicios con Jason API rest.
En fin.
Bueno.
Pero típicamente con acceso a datos con los daho o con repository con métodos que realizan consultas
u operaciones a tablas.
En las Cerrato ya tenemos listo nuestro service.
Entonces ahora lo tenemos que utilizar en el controlador.
Vamos a guardar.
Nos vamos al controlador.
Bueno, y acá lo tenemos que implementar, utilizar este CERMI.
Recuerden que el controlador interactúa con los datos, con el modelo, con clase SERVIS, pero lo vamos
a implementar primero con el operador NEW sin inyección dependencia, de forma que quede acoplado a
esta implementación concreta.
Y lo podemos hacer acá dentro del método crear la instancia del servicio con el NEW.
O bien como atributo también lo vamos a hacer como atributo private.
El tipo mi servicio importamos.
Servicio y bueno.
New.
Mi servicio perfecto se fijan eita muy acoplaba y tenemos un problema importante, sobretodo en una
aplicación mediana o grande.
Vamos a tener un problema de mantención y escalabilidad de la aplicación.
Claro, porque al estar acoplado a una implementación concreta, por ejemplo, el tipo mi servicio,
este nombre de clase podría ser reemplazado por otra implementación que también implemente el método
operación.
Este método, por ejemplo, podríamos tener otra clase con este mismo nombre método, pero que la implementación
cambie, por ejemplo.
Bueno, ahora retorna un dato con un streak literal, pero esta información lo podría obtener desde
otro micro servicio o bien desde la base dato con JPA e implementado con internet a través de una clase
dado.
Entonces la implementación podría cambiar y el nombre de la clase también podría cambiar.
Entonces, claro, podríamos tener muchos controladores que estén utilizando esta clase servis y tendríamos
que estar editando, modificando cada controlador y vamos a perder un tiempo enorme.
Entonces no fue una práctica que esté tan acoplado.
Entonces, como solución es utilizar primero inyección, dependencias y segundo interfaces.
Y con la inyección de dependencia es todo al revés.
Por ejemplo, acá estamos creando la instancia.
La idea es que nosotros no llamemos al objeto, no lo instancia, sino que el objeto, en este caso
el contenedor de Spring a través de los beans o componentes, él nos llama al controlador y nos inyecta
la instancia.
La probé y de hecho de ahí viene un principio de inyección dependencia que se llama Hollywood, tal
cual como el principio Hollywood que dice no nos llames, nosotros te llamaremos.
Bueno, básicamente que no quería la instancia.
Nosotros la vamos a crear por ti y vamos a manejar esta instancia y esa la idea.
Pero por ahora, como explicaba, vamos a partir sin inyección, dependencia tal cual, de forma acopladas.
Bueno, y después la siguiente clase la vamos a implementar y después vamos a implementar el uso de
interfaces para desacoplar el tipo concreto y sea lo más genérico posible y lo más abstracto.
Entonces, a través de un interfaz podríamos tener varias implementaciones, pero inyectamos a través
del tipo genérico.
De esa forma no tenemos que estar modificando el código ni editando los controladores, porque el tipo
es abstracto, genérico, es una interfaz y no una clase concreta.
Bien, entonces ahora vamos a pasar esto a la vista usando model punto at atributo, algún nombre,
por ejemplo, objeto o nombre que queramos y por acá servicio, punto, operación.
Entonces estamos pasando el dato de que fuimos a buscar mediante el servis a la vista para imprimirla,
para mostrarla, pero bien, acá tenemos la vista.
Índex La tenemos que crear donde en Recursos, Resources y templates, acá creamos con New Otro.
Por acá buscamos web.
Acá la tenemos.
HTML.
File.
Lo marcamos siguiente.
Index puntu html.
Finalizar.
Bueno, lo modificamos lo primero, el HTML, colocar el next post de timeline, pero es opcional.
XML Next Paiz do punto th.
Básicamente para colocar un nombre de despeus para que no haya conflicto nombre en los atributos de
nuestra plantilla.
Pero también es opcional.
Si no lo colocamos podría mostrar en la plantilla un warning de advertencia que no conoce el atributo
TH de Tayyip.
Entonces por eso mejor indicar enespecial y la ruta de siempre.
Punto Tayyip.
Punto org.
Lo siguiente cambiamos acá el chat, set o juego de caracteres a un Tf8.
En el voy a tener un div que muestre el objeto, es decir, esto en realidad lo que estamos pasando
a la vista.
Este nombre parámetro objeto entonces como siempre bueno usando Tinduf TH que sería en especie text
para imprimir un texto una variable, sino peso y las llaves.
Bueno, básicamente la extrapolación de string para imprimir el valor que contiene el atributo o variable
objeto que lo pasamos desde controlador a la vista.
Guardamos y listo.
Vamos a probar.
Vamos a adelantar.
Localhost 80 80 perfecto.
Ejecutando un proceso importante se fijan acá muestra la información, el dato que obtenemos desde el
service y lo pasamos a la vista por ahora de forma acoplada.
Después la siguiente clase vamos a utilizar, vamos a modificar este código con inyección dependencia
y recuerde que estamos en la raíz, pero el controlador también está mapeado a index.
Entonces, con Índex muestra lo mismo.
Por qué lo maquillamos de esa forma?
Recuerden acá el controlador.
Están las rutas.
Bien, eso sería por ahora.
Y continuamos la siguiente clase.