Ver Mensaje Individual
  #10 (permalink)  
Antiguo 11/08/2013, 08:22
Avatar de Italico76
Italico76
 
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Duda diseño : entre re-uso / eficiencia / evitar divergencias

Gracias a todos......

Cita:
Iniciado por hhs Ver Mensaje
El detalle con esto es que en algún momento el objeto que va a usar tu clase estática tiene que decidir que método ocupar para su búsqueda y eso se traduce en una serie de if o en el uso de un switch, si usas el patrón puedes quitar la ronda de condiciones y simplificar el uso de tus algoritmos. te recomiendo la siguiente lectura: http://www.informit.com/articles/art...98607&seqNum=2
El "Contexto" no es simple sino formado por estados de varias variables ........creeria o hay en algun lado una serie de IFs / SWITCH-CASEs o bien accedo a un arreglo multi-dimesional que guarda el nombre del metodo o clase de busqueda.......... Si estoy equivocado dame un ejemplo de implementacion pero es por el caso particular de un contexto complejo que no veo el patron por si mismo resuelva el asunto. Distinto seria se pudiera hablar de un contexto por ejemplo de suma / resta / division / multiplicacion / etc......

Sobre lo que dices tu @Dashboard...... tengo implementada IComparable como en C#, no puedo hacer dibujitos UML pero dejo las interfaces por si ven algo mal......

Código PHP:
Ver original
  1. /**
  2.  * Interfaces
  3.  *
  4.  * @package FastDev\Sequences
  5.  * @author Pablo Bozzolo (2013)
  6.  *
  7.  */
  8.  
  9. /**
  10.  * IComparable: interfaz homologa a C# 
  11.  */
  12. Interface IComparable
  13. {
  14.    /**
  15.     * @param <type> algo comparar  
  16.     * @return int {-1,0,1}
  17.     */
  18.    public function compareTo($other);
  19.  
  20. }
  21.  
  22. Interface IElement extends IComparable { }
  23.  
  24. Interface ISequenceable extends IComparable, \Iterator, \Serializable
  25. {
  26.     public function length();    
  27.     public function addElem (IElement $tag);
  28.     public function findElem (IElement $search, $continue=true);    
  29.     public function findSub(ISequenceable $sub);
  30. }
  31.  
  32.  
  33. Interface IGap extends ISequenceable { }
  34.  
  35. /**
  36.  * Secuencias que pueden contener Gaps
  37.  */
  38. Interface IGapSequenceable extends ISequenceable
  39. {
  40.     public function length($include_gap_length=false);
  41.     public function compareTo ($sec, $gaps=null);
  42.     public function haveGaps();
  43.     public function addGap (IGap $gap);
  44.     public function addElem (IElement $tag);
  45.     public function findElem (IElement $search, $continue=true);    
  46.     public function findSub(ISequenceable $sub, $gaps=null);
  47. }
  48.  
  49. /**
  50.  * Chequeos de concistencia
  51.  */
  52. Interface IChecking
  53. {
  54.     public function getMinLen();
  55.     public function getMaxLen();
  56.     public function getMustContain();
  57.     public function getMustNotContain();
  58.     public function getCanContain();
  59.     public function countMustContain();
  60.     public function countMustNotContain();
  61.     public function countCanContain();
  62.     public function setMinLen(int $len);
  63.     public function setMaxLen(int $len);
  64.     public function addCanContain(IElement $e);
  65.     public function addMustContain(IElement $e);
  66.     public function addMustNotContain(IElement $e);
  67.     // y chequeo con:
  68.     public function check();
  69. }
  70.  
  71.  
  72. /**
  73.  * Secuencias que pueden contener Gaps pero ademas profundidad (listas de nodos)
  74.  */
  75. Interface ITagSequenceable extends IGapSequenceable
  76. {  
  77.     public function getDeep($pos=null);            
  78.     public function compareTo ($sec, $gaps=null, $deep=null);
  79.     public function addGap (IGap $gap, $deep=null);  
  80.     public function addElem (IElement $tag , $deep=null);    
  81.     public function findElem (IElement $search, $continue=true);        
  82.     public function findSub (ISequenceable $sub, $deep=null, $gaps=null);
  83. }
  84.  
  85.  
  86. Interface ISequenceAligneable
  87. {
  88.     public static function add (ISequenceable $sec);
  89.     public static function align();
  90. }

Voy a usar la libreria para hacer comparaciones, busquedas y alineamientos de secucuencias de HTML / XML, ADN, ARN y proteinas.......

Es muy facil buscar una secuencia dentro de otra, aun si la secuencia es un arbol DOM exportado como DomNodeList
__________________
Salu2!

Última edición por Italico76; 11/08/2013 a las 23:51