Estoy reescribiendo mis codigos y entrando mas de lleno a POO, por lo que me gustaria que me den opiniones sobre lo que estoy trabajando para saber si voy bien o me regreso:
1- Clase principal: Aqui cargo toda la configuracion y tengo funciones generales para manejo de mensajes, errores, redirecciones, etc.
2- Clase
abstractas base donde creo funciones que usan la instancia de la clase principal, con el fin de evitar al maximo el uso de
global $clase; (claro, fuera de la base
)
3- Clases
abstractas (model, view, controller) que extienden la clase base y que incluyo solo funciones especificas para cada capa.
4- Clase especifica (model, view, controller) para cada modulo.
Ejemplo:
Código PHP:
Ver original// Clase general
class principal {
private $_models = array(); public function __construct() {}
// Obtener o crear instancia de un modelo
public function getModel($model) {
if(!isset($this->_models
[$model])) { $file = "ruta/{$model}.model.php";
$class = $model . 'Model';
// try-catch para incluir el archivo
// Verifico que exista la clase
$this->_models[$model] = new $class();
}
return $this->models[$model];
}
// Crear archivo de cache
public function saveCache($file, $contents) {
// Guardo todo en un archivo
}
// Manejo de errores
public function error($msg) {
die($msg); // Es solo un ejemplo }
}
// Clase base para tener acceso a funciones generales en modelo, vista y controlador
class base {
protected function __construct() {}
public function error($msg) {
global $principal;
$principal->error($msg);
}
}
// Clase para modelos
class myModel extends base {
protected function __construct() {}
public function saveCache($file, $contents) {
global $principal;
$principal->saveCache($file, $contents);
}
}
// Modelo para configuracion del sistema
class configModel extends myModel {
private $_config = array(); // Acceso y modificacion con getter y setter public function __construct() {
// Cargo la configuracion desde la base de datos
// Si algo falla:
parent::error('No se puede cargar la configuracion.');
}
public function saveConfig($newValues) {
// Guardo los nuevos valores de configuracion
// Guardo todo en archivo de cache
parent::saveCache('config', $this->_config);
}
}
Ok, ese es el resumen de lo que llevo hasta ahora, por el momento tengo la clase para conexion y manejo de base de datos "por fuera" y tengo que estar usando
global $db; para tener acceso a sus metodos.
Todos los comentarios y sugerencias son bienvenidos. Gracias.