UD 3 Separación de la logica de negocio
Desarrolla aplicaciones web identificando y aplicando mecanismos para separar el código de presentación de la lógica de negocio.
- F Se han escrito aplicaciones web con ~~mantenimiento de estado~~ (a partir de la UD5) y separación de la lógica de negocio.
Ejemplo "Books" en MVC
El siguiente ejemplo muestra una aplicación con el enfoque MVC
La siguiente es una estructura básica en PHP y HTML que usa el patrón Modelo-Vista-Controlador (MVC) sin mantenimiento de estado. La aplicación consume datos de libros desde una API pública.
Estructura de Archivos
Crea la siguiente estructura de directorios y archivos para separar la lógica de negocio:
- index.php # Punto de entrada de la aplicación
- controllers/
- BookController.php # Controlador que obtiene datos de la API
- models/
- BookModel.php # Modelo para representar y gestionar los datos del libro
- views/
- BookView.php # Vista que muestra los datos del libro
- config.php # Configuración general (API URL)
Paso 1: Configuración
config.php Define la URL de la API para obtener datos de los libros.
<?php
// URL de una API pública que proporciona datos de libros
define('API_URL', 'https://api.itbook.store/1.0/new');
?>
Paso 2: Crear el Modelo
models/BookModel.php El modelo obtiene datos de la API y los convierte en un formato adecuado para el controlador.
<?php
class BookModel {
public function getBooks() {
$json = file_get_contents(API_URL); // Obtiene datos de la API
$data = json_decode($json, true); // Decodifica la respuesta JSON
return $data['books'] ?? []; // Devuelve la lista de libros o un array vacío si no hay datos
}
}
?>
Paso 3: Crear el Controlador
controllers/BookController.php El controlador llama al modelo para obtener los datos de los libros y luego los pasa a la vista.
<?php
require_once 'models/BookModel.php';
require_once 'views/BookView.php';
class BookController {
private $model;
private $view;
public function __construct() {
$this->model = new BookModel();
$this->view = new BookView();
}
public function displayBooks() {
$books = $this->model->getBooks(); // Obtiene los datos del modelo
$this->view->render($books); // Pasa los datos a la vista para mostrarlos
}
}
?>
Paso 4: Crear la Vista
views/BookView.php La vista muestra la lista de libros en HTML. Utiliza los datos proporcionados por el controlador.
<?php
class BookView {
public function render($books) {
echo "<!DOCTYPE html>";
echo "<html lang='es'>";
echo "<head>";
echo "<meta charset='UTF-8'>";
echo "<title>Lista de Libros</title>";
echo "</head>";
echo "<body>";
echo "<h1>Libros Recientes</h1>";
if (empty($books)) {
echo "<p>No se encontraron libros.</p>";
} else {
echo "<ul>";
foreach ($books as $book) {
echo "<li>";
echo "<strong>" . htmlspecialchars($book['title']) . "</strong><br>";
echo "Autor: " . htmlspecialchars($book['subtitle']) . "<br>";
echo "ISBN: " . htmlspecialchars($book['isbn13']) . "<br>";
echo "<img src='" . htmlspecialchars($book['image']) . "' alt='Portada'><br>";
echo "<a href='" . htmlspecialchars($book['url']) . "'>Más información</a>";
echo "</li><br>";
}
echo "</ul>";
}
echo "</body>";
echo "</html>";
}
}
?>
Paso 5: Punto de Entrada
index.php
Este archivo inicializa el controlador y muestra los libros. Al ejecutar index.php
, se carga toda la aplicación y se llama a los métodos del controlador. (Se podría mejorar con lo visto en la práctica autoload)
<?php
require_once 'config.php';
require_once 'controllers/BookController.php';
$controller = new BookController();
$controller->displayBooks();
?>
Flujo de Trabajo:
- index.php: El punto de entrada inicializa el
BookController
y llama adisplayBooks()
para empezar el flujo. - BookController.php: El controlador llama al modelo
BookModel
para obtener los datos de la API y los pasa a la vistaBookView
. - BookModel.php: El modelo se comunica con la API pública, obtiene los datos y los devuelve al controlador.
- BookView.php: La vista recibe los datos del controlador y los renderiza en HTML.