En la base de datos que creamos existe una tabla donde se ubican las provincias del país (tabla PROVINCIA). Esta tabla está conformada por su PK (el id) y el nombre de la provincia (entre otros datos).
Se requiere un servicio que, dado un id de provincia, devuelva la provincia en cuestión. El contrato de negocio deberá ser tal que:
Durante la construcción del sistema usaremos TDD. Sin embargo, previo al inicio de la codificación, deberemos diseñar la solución completa que implementaremos.
Recordando la arquitectura planteada, deberemos resolver la lógica de negocio y la lógica de acceso a datos.
Primero y fundamental, deberemos diseñar nuestro objeto de dominio: la Provincia.
Además, al tener 2 capas, deberemos realizar 2 interfaces: una para el Service (la lógica de negocio) y otra para nuestro Repository (el acceso a datos). Luego deberemos crear las implementaciones de estas interfaces.
En resumen, vas a tener que generar un diagrama de clases con los siguientes elementos, con los nombres y paquetes que se indican a continuación:
La interfaz del Service tendrá entonces un único método:
Provincia buscarPorId(Long id);
La interfaz del Repository tendrá también un único método, que buscará en la base de datos una Provincia a partir de su id. La firma de este método será:
Provincia findById(Long id);
(más adelante veremos porqué usamos este nombre "raro" de firma para el repositorio)
También deberás agregar los atributos de la clase Provincia. ¡No te olvides de seguir las convenciones de Java!
Además, deberás diseñar un diagrama de secuencia donde se muestre la interacción entre estas clases (es decir, cómo resolverán las implementaciones las llamadas entre si).
No te preocupes por la implementación del Repository: ya veremos más adelante cómo acceder a la base de datos. Iniciaremos creando un Repository que devuelva datos "programáticamente", sin acceder a una base de datos real. Es decir, el nombre de la implementación del Repository tendrá la palabra "Dummy" para identificar esta implementación "rápida" de la real.
El servicio buscarPorId está recibiendo un Long como parámetro. ¿Se te ocurre alguna optimización para la firma de este método?
Con el diseño terminado, deberás tener toda la estructura de tu aplicación, con todas las clases que la resolverán. Es interesante notar que las interfaces de las capas no cambiarán a lo largo del curso: agregaremos mucha más funcionalidad y cambios en la implementación (montones!), pero nunca deberemos modificar la interfaz del negocio.
¡Comenzamos con el taller! Veremos el problema a resolver (un servicio que deberá exponerse), y diseñaremos la solución para este problema.