Hola y antes de nada advierto que llevo muy poco de lleno en POO, como posiblemente se note en adelante ^^, así que sentiré si le doy alguna patada a los conceptos POO.
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:
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'); }
Al margen de lo que el código haga o deje de hacer, que creo no importa...
¿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:
Ver originalpublic 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) {
$fileCitys = ( isset($citys) && false !== $citys ) ?
'.citys' : ''; $fileCPs = $this->_model->getResource("cplist{$fileCitys}");
return (string) $fileCPs;
}
Toma ya xDDD
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 ;)