El tema es una cuestión de diseño, de concepto y se podría reducir a dos cosas:
1. ¿Es correcto usar getters, además privados (internos), para acceder a atributos también privados e internos, o simplemente se debe referenciar al atributo a pelo y yastá?
2. Sobre un Singleton que estoy usando, adaptado del gran Zsamer que andará por aquí:
Estoy trabajando con Zend Framework y esto ya me trae de cabeza. Pongo el código:
Código PHP:
Al margen de lo que el código haga o deje de hacer, que creo no importa...Ver original
// Modelos de datos: private function _getModel($model) { return (object) Core::getSingleton("{$model}"); else throw new Exception('No pudimos inicializar el modelo de datos.'); } private function _getChokepointModel() { return $this->_getModel('be/chokepoint'); } private function _getFacilityModel() { return $this->_getModel('be/facility'); } private function _getUnitModel() { return $this->_getModel('be/unit'); }
¿debería llamar al Singleton y punto?
Es que, aunque me parece funcional para comprobar un error que aunque no debería podría ocurrir, y abstraer al resto de métodos de la forma en que obtengo el modelo de datos, me parece demasiado redundante... :(
3. No digo ya nada cuando me pasan cosas como esta que sigue, para intentar comprobar si tenemos el Singleton, la cuestión es que la comprobación, ese gasto, ese consumo, me lleva a intentar ya de paso instanciarlo... y como es lógico, pues el Sigleton pierde todo su sentido. Es decir:
Código PHP:
Toma ya xDDDVer original
public function __construct() { // Core Singleton: if ( null === $this->_model ) $this->_model = $this->_getCore()->getSingleton('default/xmlresources'); } else throw new Exception('No obtuvimos un gestor del modelo de datos.'); } /* Este método es bastante tonto la verdad xDD */ private function _getCore() { throw new Exception('No tenemos la clase Core.'); else return (object) new Core(); } private function _getCPFile($citys = true) { $fileCPs = $this->_model->getResource("cplist{$fileCitys}"); return (string) $fileCPs; }
Sé que _getCore(), así tal como está la cosa es bastante inútil ya que la clase -el Singleton- se comprueba en el constructor... pero podría ser que no, o no usarse ese constructor y que el siguiente miembro usará directamente _getCore() para obtener el Singleton.
En cualquier caso sé que es aberrante... pero cuando se usan Singleton, cualquier intento de comprobarlo o abstraer a otros métodos frente éste, siempre que no se le llame directamente va a ser poco lógico, ¿no?
Bueno... es obvio que me lío un poco, como siempre, muchas gracias de antemano, en especial a los gurús: Enriqueplace y gator ;)
Un saludo.
PD - Off Topic: Si alguien conoce el 2online estoy trabajando en ello, con Wiretap ;)