Hola buenas, desde hace unos días que estoy pensando en como implementar una básica gestión de usuarios con una arquitectura orientada a objetos. Mis dudas van más bien relacionadas en buenas prácticas y como deberia estructurarlo, más que la implementación en sí.
El ejemplo es muy sencillo. Básicamente el objetivo es comunicarse con la base de datos de una forma correcta y mantenible para insertar, modifcar, borrar y seleccionar usuarios. (No estoy muy familiarizado con el php, aunque la duda sea más genérica).
Lo que he pensado es en tener una classe Usuario, que sea la definición de usuario. Sólo se encarga de definir que es un usuario. Es decir:
Ahora bien, voy a tener que hacer operaciones con la base de datos, así que he creado un DAO
Y por último, la clase Databse, que es simplemente la conexión al repositorio.
Entonces si quisiera insertar un usuario haría:
Soy consciente que no existe una solución correcta, y que existen varios diseós y patrones para solventar esto, y me gustaría saber si esta está bien implementada, si quizás alguna otra se adaptaría mejor a mis necesidades.
Perdón por hacerme pesado con un post tan largo!
Muchas gracias!
El ejemplo es muy sencillo. Básicamente el objetivo es comunicarse con la base de datos de una forma correcta y mantenible para insertar, modifcar, borrar y seleccionar usuarios. (No estoy muy familiarizado con el php, aunque la duda sea más genérica).
Lo que he pensado es en tener una classe Usuario, que sea la definición de usuario. Sólo se encarga de definir que es un usuario. Es decir:
Código [Seleccionar]
class Usuario {
private $id;
private $username;
private $password;
//Getters & Setters
}
Ahora bien, voy a tener que hacer operaciones con la base de datos, así que he creado un DAO
Código [Seleccionar]
class UsuarioDAO{
private $db;
private $pdo;
public function __construct()
{
$db = new Database;
$pdo = $db->getPDO();
}
public function createUser($user)
{
$sql = 'INSERT INTO users (`username`,`password`) VALUES(:username, :password)';
$pdo->prepare($sql);
$pdo->bindValue(':username', $user->getUsername(), PDO::PARAM_STR);
$pdo->bindValue(':password', $user->getPassword(), PDO::PARAM_STR);
return $pdo->execute();
}
//resto de operciones con la bd
}
Y por último, la clase Databse, que es simplemente la conexión al repositorio.
Código [Seleccionar]
class Database {
private $pdo;
public function __construct()
{
$pdo = new PDO('mysql:host=localhost;dbname=testdb;charset=utf8', 'username', 'password');
}
public function getPdo() {
return $this->pdo;
}
}
Entonces si quisiera insertar un usuario haría:
Código [Seleccionar]
$userdao = new UsuarioDAO;
$user = new Usuario;
$user->setUsername('juan');
$user->setPassword('1234');
$userdao->createUser($user);
Soy consciente que no existe una solución correcta, y que existen varios diseós y patrones para solventar esto, y me gustaría saber si esta está bien implementada, si quizás alguna otra se adaptaría mejor a mis necesidades.
Perdón por hacerme pesado con un post tan largo!
Muchas gracias!