> A nivel práctico resulta más sencillo implementar el Factory 
> Method (ó Abstract Factory en este caso, puesto que la 
> instanciación es dinámica en el crearModulo y no se está 
> utilizando una clase de creación concreta)

Creo que te estas equivocando (igual lo hago yo) pero según tengo yo
entendido ni en el Factory Method (FM) y en el Abstract Factory (AF) se
habla de cómo realizar la implementación, solo de la "arquitectura". He
visto unos cuantos que usan reflexion para hacerlo, que viene a ser "lo
mismo" que en Flash usar _global. Que yo sepa en el AF se definen interfaces
para la creacion de un conjunto de objetos relacionados, mientras que en el
FM se encarga solo de un tipo en concreto. Que en la implementacion uses un
switch, reflexion o lo que quieras para determinar el tipo concreto no
influye en que sea un pattern u otro. Vamos, eso creo. De todas maneras, el
ejemplo que he puesto yo se hacerca mas a una "simple factory", en realidad
hacer un FM parece más correcto en este caso, sobre todo si quiere escalar a
realizar distintos tipos de portales, pero es por darle algo sencillo con lo
que comenzar :)


A mi me pareció cojonudo este articulo al respecto (en castellano)
(http://www.microsoft.com/spanish/msdn/comunidad/mtj.net/voices/MTJ_3624.asp
)
 
> La signatura del método "crearModulo" debería ser entonces 
> del tipo crearModulo(Function,Args[]), evitando el 
> quick-and-dirty de _global[string] que, aunque funcione, 
> podría dar sorpresas en el futuro --o no--.

Efectivamente podria darlas, aunque no conozco otra manera de instanciación
dinámica en Flash que no pase por usar el eval o la array sintax, y el scope
en este caso es correcto, las clases se encuentran ahí, no se me ocurre otra
forma que no pase por un switch la verdad...

> De igual forma no 
> entiendo el uso del casting a la interfaz, ¿acaso es 
> estrictamente necesario?

El factory method tendra que devolver algun tipo digo yo :) un interface me
ha parecido lo mejor.

> 
> Me parece infinitamente más usable (y con más posibilidad 
> para el control de errores) crear módulos de esta forma:
> 
>       import myModules.ConcreteModule;
>       ModuleFactory.createModule(myModules.ConcreteModule,"");
> 

Sin duda :) pero él tiene un string que viene de un XML, no una referencia a
la clase.

Interesante conversacion, por otra parte...

Joseba Alonso
www.5dms.com
www.sidedev.net 

----------------------------------
Lista ASNativos:[email protected]
http://www.5dms.com/listas
----------------------------------

Responder a