Ver Mensaje Individual
  #37 (permalink)  
Antiguo 04/11/2008, 12:24
Keysher
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 22 años, 1 mes
Puntos: 17
Respuesta: Duda sobre teoria de clases

Coincido en que en la mayoría de los casos ese planteamiento es el correcto.

De hecho reconozco que estaba equivocado en algunas de las premisas, había errado en el análisis inicial.

Pero sigo creyendo que en un caso concreto no me interesa que el objeto se cree por sí mismo.

Tenemos una clase parecida a esta (es muy básica):

Código php:
Ver original
  1. class Template {
  2.     private $templateName;
  3.     private $vars;
  4.     private $templateFile;
  5.  
  6.     function __construct($auxTemplate, $auxFile) {
  7.         $this->templateName = $auxTemplate;
  8.         $this->templateFile = $auxFile;
  9.         $this->vars = array(); 
  10.     }
  11.  
  12.     public function setVar($auxVar, $auxValue) {
  13.         if (!array_key_exists($auxVar, $this->vars))
  14.             $this->vars[$auxVar] = $auxValue;
  15.     }
  16.     public function getVar($auxVar=NULL) {
  17.         if ($auxVar == NULL)
  18.             return $this->getVars();
  19.  
  20.         if (!array_key_exists($auxVar, $this->vars))
  21.             return NULL;
  22.  
  23.         return $this->vars[$auxVar];
  24.     }
  25.            
  26.     public function getTemplate() {
  27.         return $this->templateName;
  28.     }
  29.            
  30.     public function getFile() {
  31.         return $this->templateFile;
  32.     }
  33.            
  34.     public function getVars() {
  35.         return $this->vars;
  36.     }
  37. }

Para instanciarla se necesita un nombre de plantilla y un fichero asociado, y eso lo tengo en un array dentro de otra clase.

Código php:
Ver original
  1. class Style {
  2.  
  3.    
  4.     private $style;
  5.     private $templates;
  6.     private $cssFiles;
  7.     private $jsFiles;
  8.     private $currentTemplate;
  9.     private $basePath;
  10.     private $preparedTemplates;
  11.        
  12.     function __construct($auxStyle, $auxStyleConfigFile, $auxStylePath) {
  13.  
  14. (...)
  15.     }
  16.  
  17.     public function selectTemplate($auxTemplate) {
  18.         if (isset($this->templates[$auxTemplate])) {
  19.             $auxPath = $this->basePath.$this->templates[$auxTemplate];
  20.             if (file_exists($auxPath)) {
  21.                 $this->emptyTemplate();
  22.                 $this->currentTemplate = new Template($auxTemplate, $this->templates[$auxTemplate]);
  23.             } else
  24.                 trigger_error($this->msgError['TEMPLATE_FILE_NOT_FOUND'].$auxTemplate, E_USER_ERROR);
  25.         }
  26.         else   
  27.             trigger_error($this->msgError['TEMPLATE_NOT_FOUND'].$auxTemplate, E_USER_ERROR);
  28.     }
  29.  
  30.     public function addVar($auxVar, $auxValue) {       
  31.         if (isset($this->currentTemplate)) {
  32.             $this->currentTemplate->setVar($auxVar, $auxValue);
  33.         } else
  34.             trigger_error($this->msgError['TEMPLATE_NOT_SELECTED'], E_USER_ERROR);
  35.     }

Entiendo que es menos flexible esta forma y que es más costoso hacer cambios en el código. Pero tampoco veo muy lógico el tener que sacar primero el nombre de la plantilla y su fichero de la clase Style, para crear luego un objeto de la clase Template con estos datos, y añadirlo a la primera clase.

Entonces, ¿debo cambiar la forma en la que se crea la clase Template? ¿lo dejo como está pero creo otro método para atar un Template creado al Estilo?

Gracias!