Paso 4: CRUD Book - Review - Explicación del diseño

La relación entre book y sus reviews es una relación de tipo composite y además en unidireccional. En el diagrama de clases un libro conoce sus reviews pero un review no conoce de qué libro es. En este paso hemos introducido en la representación detallada de book la colección de sus reviews. Significa que cuando se solicita un libro con un servicio GET, con el libro viene su colección de reviews. Los servicios definidos en el paso-3 ahora reciben y devuelven esta nueva representación de book.

La representación de review por su lado, es simple consistiendo únicamente de sus atributos básicos. En nuestro diseño, una relación de tipo composite se representa como un subrecurso: review es un subrecurso del recurso book. Un subrecurso no tiene representación detallada ya que no se puede acceder a él sin pasar por el recurso dueño, en este caso book.

El subrecurso no tiene servicios CRUD independientes. Para crearlo, accederlo, modificarlo o borrarlo se debe pasar por el recurso que lo contiene. Entonces, el recurso book tiene nuevos servicios para manipular la relación con sus reviews:

  1. Obtener los reviews de un libro,
  2. Agregar un review a un libro
  3. Eliminar un review de un libro
  4. Actualizar un review de un libro.

La relación unidireccional entre book y review debe reflejarse tanto en las clases DTO para hacer el mapping con los objetos json, como en las clases Entity para hacer el mapping con la base de datos.

Representaciones de los recursos en la capa de servicios

Para representar la relación entre un libro y sus reviews, hemos agregado un atributo reviews de tipo colección de ReviewDTO a la clase BookDetailDTO. El siguiente diagrama ilustra la relación. Note que la clase ReviewDTO no tiene ninguna relación hacia BookDTO.

Representación en la base de datos

Nuevos servicios para reviews

Para los nuevos servicios del recurso book relacionados con la colección de reviews que cada libro tiene, se diseñó un subrecurso ReviewResource. El propósito es, tener en una sola clase todos los servicios cuyo path comienza por:

books/{idbook}/reviews

Desde el recurso book, antes de invocar el subrecurso nuevo, se puede validar una sola vez si el libro con identificador idbook existe.

results matching ""

    No results matching ""