Ver Mensaje Individual
  #1 (permalink)  
Antiguo 27/04/2009, 12:40
Avatar de Covids0020
Covids0020
 
Fecha de Ingreso: septiembre-2003
Ubicación: España
Mensajes: 217
Antigüedad: 21 años, 3 meses
Puntos: 1
Ser redundante con Singleton, conceptos

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
  1. // Modelos de datos:
  2. private function _getModel($model)      {
  3.     if ( !empty($model) && method_exists('Core', 'getSingleton') )
  4.         return (object) Core::getSingleton("{$model}");
  5.     else
  6.         throw new Exception('No pudimos inicializar el modelo de datos.');
  7. }
  8. private function _getChokepointModel()  { return $this->_getModel('be/chokepoint'); }
  9. private function _getFacilityModel()    { return $this->_getModel('be/facility'); }
  10. 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 original
  1. public function __construct() {
  2.     // Core Singleton:
  3.     if ( method_exists('Core', 'getsingleton') ) {
  4.         if ( null ===  $this->_model )
  5.             $this->_model           = $this->_getCore()->getSingleton('default/xmlresources');
  6.     } else
  7.         throw new Exception('No obtuvimos un gestor del modelo de datos.');
  8. }
  9. /* Este método es bastante tonto la verdad xDD */
  10. private function _getCore() {
  11.     if ( !@class_exists('Core') )
  12.         throw new Exception('No tenemos la clase Core.');
  13.     else
  14.         return (object) new Core();
  15. }
  16. private function _getCPFile($citys = true) {
  17.     $fileCitys = ( isset($citys) && false !== $citys ) ? '.citys' : '';
  18.     $fileCPs = $this->_model->getResource("cplist{$fileCitys}");
  19.     return (string) $fileCPs;
  20. }
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 ;)
__________________
"La sabiduría comienza donde acaba el conocimiento". Yaris.
http://www.culturadigital.org