Question:
Date: 16-02-2025 15:35:57
(In Spanish)
Quisiera mostrarle mi codigo y poder pedir su opinion en que puedo mejorar
he aplicado MVC , POO , Patron de diseno Singleton , PDO
POR EL MOMENTO SOLO TENGO EL CORE
Votes: 0 - Answers: 6 - Views: 3 Share on: Google Facebook Twitter LinkedIn Link
Implementacion de MVC PHP[Unresolved]
Hola amigos espero que se encuentren muy bien atualmente estoy aprendiendo de mvc POO en php para luego empezar ya teniendo las bases muy solidas poder aprender LaravelQuisiera mostrarle mi codigo y poder pedir su opinion en que puedo mejorar
he aplicado MVC , POO , Patron de diseno Singleton , PDO
POR EL MOMENTO SOLO TENGO EL CORE
//ARCHIVO CRUD <?php require_once ("core/conexion.php"); class Crud { private PDO $pdo; private string $tabla; private string $logFile; public function __construct(string $tabla){ $this->tabla = $tabla; $this->pdo= Conexion::getInstance()->conectar(); $this->logFile = __DIR__ . '/logs/errores.log'; // Guardamos logs en una carpeta específica } public function consultarTodo(): array { try{ $statement= $this->pdo->prepare("SELECT * FROM $this->tabla"); $statement->execute(); return $statement->fetchAll(PDO::FETCH_OBJ); }catch(PDOException $e){ error_log("[" . date("Y-m-d H:i:s")."][Crud]Error :". $e->getMessage()."\n",3,$this->logFile); return []; } } public function consultarUno(int $id): ?object { try { $statement = $this->pdo->prepare("SELECT * FROM $this->tabla WHERE id = ?"); $statement->execute([$id]); return $statement->fetch(PDO::FETCH_OBJ) ?: null; } catch (PDOException $e) { error_log("[" . date("Y-m-d H:i:s") . "] [Crud] Error: " . $e->getMessage() . "\n", 3, $this->logFile); return null; } } public function eliminar(int $id): bool { try { $statement = $this->pdo->prepare("DELETE FROM $this->tabla WHERE id = ?"); return $statement->execute([$id]); } catch (PDOException $e) { error_log("[" . date("Y-m-d H:i:s") . "] [Crud] Error: " . $e->getMessage() . "\n", 3, $this->logFile); return false; } } public function crear(string $columnas, string $marcadores, array $datos): bool { try { $statement = $this->pdo->prepare("INSERT INTO $this->tabla ($columnas) VALUES ($marcadores)"); return $statement->execute($datos); } catch (PDOException $e) { error_log("[" . date("Y-m-d H:i:s") . "] [Crud] Error: " . $e->getMessage() . "\n", 3, $this->logFile); return false; } } public function modificar(string $columnas, array $datos): bool { try { $statement = $this->pdo->prepare("UPDATE $this->tabla SET $columnas WHERE id = ?"); return $statement->execute($datos); } catch (PDOException $e) { error_log("[" . date("Y-m-d H:i:s") . "] [Crud] Error: " . $e->getMessage() . "\n", 3, $this->logFile); return false; } } } ?>
//ARCHIVO CONEXION A BD <?php class Conexion { private static ?Conexion $instancia = null; // Almacena la instancia única de la clase private static ?PDO $conexion = null; // Almacena la conexión PDO private string $driver; private string $host; private string $user; private string $pass; private string $database; private string $charset; private string $logFile; // Constructor privado para evitar instanciación externa private function __construct( string $driver = "mysql", string $host = "localhost", string $user = "root", string $pass = "", string $database = "sunny_side", string $charset = "utf8" ) { $this->driver = $driver; $this->host = $host; $this->user = $user; $this->pass = $pass; $this->database = $database; $this->charset = $charset; $this->logFile = __DIR__ . '/logs/errores.log'; // Guardamos logs en una carpeta específica if (!is_dir(__DIR__ . '/logs')) { mkdir(__DIR__ . '/logs', 0755, true); } } // Método para obtener la única instancia de la clase /** * Obtiene la única instancia de la clase Conexion. * Si no existe, la crea; si ya existe, devuelve la existente. * * @return self */ public static function getInstance(): self { if (self::$instancia === null) { self::$instancia = new self(); } return self::$instancia; } // Método para obtener la conexión a la base de datos public function conectar(): PDO { if (self::$conexion === null) { try { $dsn = "$this->driver:host=$this->host;dbname=$this->database;charset=$this->charset"; self::$conexion = new PDO($dsn, $this->user, $this->pass, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false ]); } catch (PDOException $e) { // Guardamos errores en un archivo log específico error_log("[" . date("Y-m-d H:i:s") . "] [Conexion] Error: " . $e->getMessage() . "\n", 3, $this->logFile); throw new Exception("Error de conexión a la base de datos."); } } return self::$conexion; } } ?>
Votes: 0 - Answers: 6 - Views: 3 Share on: Google Facebook Twitter LinkedIn Link
Answers:
-
Date: 16-02-2025 22:50:20 Buenas Carlos:
Te doy algunos comentarios de mirada rápida.
- No uses el tag de cierre de php?>
al final de los archivos
- El tema de escribir código en Español (o en Spanglish) te recomiendo evitarlo, mejor ir todo en Inglés.
- Construcciones como$this->pdo= Conexion::getInstance()->conectar();
te van a dificultar el testing/evolución de tu aplicación. En general, deberías preferir la inyección de dependencias al uso directo de Singletons.
- El tema del log también te convendría manejarlo en una clase separada de Crud. Mi recomendación aquí es usar monolog
- No termino de ver el objetivo de la clase conexión. ¿Qué aporta respecto a PDO?
Bueno, espero estos comentarios te ayuden a pensar tu app. Cualquier duda me consultas ;) Votes: 1 - Link answer -
Date: 17-02-2025 09:34:16 Muchas Gracia tomare en cuenta tus recomendaciones , algunas cosas son nuevas para mi y tratare de poder implementarlas y aprenderlas a usar correctamente muchas gracias por su tiempo amigo Mauro Chojrin Votes: 0 - Link answer
-
Date: 17-02-2025 22:34:55 No hay problema Carlos! ¿Qué cosas son nuevas para ti? Votes: 1 - Link answer
-
Date: 18-02-2025 16:56:39 Pues Mauro Chojrin pues en la universidad no avanzamos netamenten en temas superiores entonces no conforme siempre voy aprendiendo temas por mi mismo y habeces voy poco a poco con un tema que abre otro tema mi meta es dominar php por lo menos los temas que me hagan entender antes de entrar a Laravel
he visto tu videos en youtube Mauro Chojrin
existe algun tipo de guia de php de usted ? Votes: 0 - Link answer -
Date: 18-02-2025 21:32:03 Hola Carlos:
Es fundamental continuar tu formación ininterrumpida si quieres trabajar en esta industria.
Coméntame qué tipo de guía estás buscando. Tengo este ebook que puede ayudarte para afianzar la parte de objetos.
En todo caso, puedes escribirme a mauro.chojrin@leewayweb.com y lo conversamos.
Saludos, Votes: 0 - Link answer -
Date: 21-02-2025 04:33:31 Hola Mauro Chojrin me he comunicado contigo al privado por @ muchas gracias por tu ayuda Votes: 0 - Link answer
To actively participate in the community first must authenticate, enter the system.Sign In