Este proyecto implementa un sistema de gestión de libros en Java utilizando el patrón de diseño Repository. El sistema permite a los usuarios agregar, ver, eliminar y cambiar el repositorio de almacenamiento de libros desde memoria, CSV, o base de datos MySQL.
Este sistema de gestión de libros está diseñado siguiendo principios de diseño orientados a objetos para garantizar modularidad, extensibilidad y facilidad de mantenimiento. A continuación, se describen algunos de los principios aplicados:
El sistema utiliza el principio de inversión de dependencia mediante la interfaz BookRepository. La clase BookManager depende de BookRepository en lugar de depender de una implementación específica, como InMemoryBookRepository o MySQLBookRepository. Esto permite que BookManager pueda funcionar con cualquier implementación de BookRepository, haciendo que el sistema sea flexible y permitiendo cambiar la fuente de datos sin modificar el código del gestor de libros.
El sistema sigue el principio de abierto/cerrado, donde las clases están abiertas a la extensión pero cerradas a la modificación:
- Abierto a la Extensión: Se pueden añadir nuevas implementaciones de
BookRepository(por ejemplo, para almacenar datos en una API o en otro tipo de base de datos) sin necesidad de modificar las clases existentes. - Cerrado a la Modificación:
BookManageryConsoleViewno necesitan ser modificados para soportar nuevos tipos de almacenamiento, ya que solo dependen de la interfazBookRepository.
Cada clase en el sistema tiene una única responsabilidad clara:
ConsoleViewmaneja la interacción con el usuario.BookManagergestiona la lógica de negocio de los libros.BookRepositoryy sus implementaciones (InMemoryBookRepositoryyMySQLBookRepository) se encargan de la persistencia de datos.
Esta separación facilita el mantenimiento y la expansión del sistema, ya que los cambios en una parte no afectan directamente a las demás.
Este diseño modular y flexible permite que el sistema sea fácilmente expandible para soportar nuevos tipos de almacenamiento o interfaces de usuario (por ejemplo, una interfaz gráfica), mejorando su capacidad de adaptación a futuras necesidades.
-
Book: Representa un libro con los atributos
isbn,titulo, yautor. Incluye métodos de acceso (getIsbn(),getTitulo(),getAutor()) y una representación en cadena (toString()). -
BookManager: Esta clase es el gestor principal de los libros. Utiliza el patrón de diseño Repository para delegar las operaciones de almacenamiento en una implementación específica de
BookRepository.- Métodos:
createLibro(String isbn, String titulo, String autor): Crea un nuevo libro.deleteBook(String isbn): Elimina un libro por ISBN.getAllBooks(): Devuelve una lista de todos los libros.changeRepository(BookRepository bookRepository): Permite cambiar el repositorio de almacenamiento de libros.
- Métodos:
-
BookRepository: Es una interfaz que define las operaciones para gestionar libros en el repositorio. Implementa los siguientes métodos:
createBook(Book book): Agrega un nuevo libro al repositorio.List<Book> findAll(): Devuelve todos los libros en el repositorio.updateLibro(Book book): Actualiza la información de un libro.deleteLibroByIsbn(String isbn): Elimina un libro por su ISBN.
- MemoryBookRepository: Implementación de
BookRepositoryque almacena los libros en memoria. - CSVBookRepository: Implementación de
BookRepositoryque almacena los libros en un archivo CSV. - MySQLBookRepository: Implementación de
BookRepositoryque almacena los libros en una base de datos MySQL.
- View: Clase de presentación que interactúa con el usuario a través de la consola. Ofrece un menú con las opciones:
- Añadir Libro: Permite agregar un nuevo libro.
- Ver todos los libros: Muestra todos los libros almacenados.
- Eliminar libro: Permite eliminar un libro por ISBN.
- Cambiar Repositorio: Permite cambiar entre repositorios (memoria, archivo CSV, o base de datos MySQL).
- Salir: Finaliza el programa.
- Clonar el Repositorio:
git clone https://github.com/tu_usuario/book-manager.git
