Ejercicio: Ejercicio 1
Identifica los anti-patrones en el siguiente código PHP y los problemas que generan:
<?php
// Identifica los anti-patrones en el siguiente código PHP y los problemas que generan:
class Usuarios {
public $db;
public function __construct() {
$this->db = new DB();
}
public function obtenerListado() {
$query = "SELECT * FROM usuarios";
$result = $this->db->query($query);
$listado = [];
while($row = $result->fetch()) {
$listado[] = $row;
}
return $listado;
}
public function crearUsuario($nombre, $email) {
// Validaciones
if(empty($nombre)) {
throw new Exception("El nombre es obligatorio");
}
if(!filter_var($email, FILTER_VALIDATE_EMAIL)) {
throw new Exception("El email no es válido");
}
// Insertar usuario
$query = "INSERT INTO usuarios VALUES ($nombre, $email)";
$this->db->execute($query);
}
}
Solución:
Solución
- Global $db: Uso de variable global para BD en vez de inyección de dependencia.
- God Class: La clase Usuarios tiene diferentes responsabilidades: obtener, crear, validar usuarios.
- Duplicated Code: Validaciones duplicadas en distintos métodos.
- SQL Injection: Interpolación directa de variables en querys.
Mejoras:
- Inyectar BD en constructor
- Separar en clases más pequeñas y enfocadas
- Centralizar validaciones en una clase Validator
- Usar consultas preparadas para prevenir inyección SQL