Ver Mensaje Individual
  #5 (permalink)  
Antiguo 27/04/2011, 18:37
Avatar de Triby
Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 7 meses
Puntos: 2237
Respuesta: MVC - modelos que se repiten?

Bueno, depende de como estas programando, si usas, por ejemplo el patron Singleton, solo obtienes la instancia del modelo, ya sea en el mismo controlador o en cada una de las funciones donde lo requieras.

Por ejemplo, to modelo podria tener algo como:
Código PHP:
Ver original
  1. class modelo {
  2.     private static $_instance = false;
  3.     private function __construct() {} // Privado para evitar crear instancias desde fuera
  4.     public static function getInstance() {
  5.         if(self::$_instance === false) {
  6.              // No se ha creado una instancia
  7.              self::$_instance = new self();
  8.         }
  9.         return self::$_instance;
  10.     }
  11.     // Aqui el resto de funciones para acceso a la tabla
  12. }

En tu controlador puedes tener algo como:
Código PHP:
Ver original
  1. class controlador {
  2.     private $_modelo = false;
  3.     public function __construct() {
  4.          // Si no has incluido el script para el modelo
  5.          include 'ruta/modelo.php';
  6.          $this->_modelo = modelo::getInstance();
  7.     }
  8.     public function nuevasNoticias() {
  9.         $noticias = $this->_modelo->leerNoticias(/* parametros, si se necesitan */);
  10.         // Aqui ejecutas la vista
  11.     }
  12. }
  13.  
  14. // O bien... podrias obtener la instancia del modelo en cada funcion:
  15. class controlador {
  16.     public function __construct() {
  17.          // Si no has incluido el script para el modelo
  18.          include 'ruta/modelo.php';
  19.     }
  20.     public function nuevasNoticias() {
  21.         $noticias = modelo::getInstance()->leerNoticias(/* parametros, si se necesitan */);
  22.         // Aqui ejecutas la vista
  23.     }
  24. }

Esto podria ser util si en la misma pagina (mismo o diferente controlador) debes tener acceso al modelo y requieres que sea solo una instancia del modelo.

Si requieres dos o mas instancias (depende mucho de que estes haciendo), entonces tendras que buscar informacion sobre Factory, en lugar de Singleton.

Por otra parte, en tu controlador frontal podrias crear una funcion que cargue los archivos y clases que requieras, de manera que puedas, por ejemplo:

Código PHP:
Ver original
  1. // Si es una funcion estatica:
  2. $modelo = frontController::loadClass('ruta/archivo.php', 'nombre_de_la_clase');
  3.  
  4. // Y la funcion seria algo como:
  5. public static function loadClass($file, $class) {
  6.     if(file_exists($file)) {
  7.          include_once $file;
  8.     } else {
  9.          // Aqui lanzas una excepcion
  10.     }
  11.     if(class_exists($class)) {
  12.          // Supongamos que es con Singleton:
  13.          return $class::getInstance();
  14.     } else {
  15.         // Aqui lanzas una excepcion
  16.     }
  17. }

Ojo, esto es de un aprendiz a otro, asi que puede que mis sugerencias no sean las mas adecuadas, pero podrian serte de utilidad.
__________________
- León, Guanajuato
- GV-Foto