Re: [Grulic-dev] Problema con factory

Página superior
Adjuntos:
+ (text/plain)

Responder a este mensaje
Autor: Edgardo Hames
Fecha:  
A: Lista de desarrollo de software libre
Asunto: Re: [Grulic-dev] Problema con factory
2009/2/13 Guillermo Marraco <guillermo.marraco@???>:
>
> podría hacer pública la interface, y declarar la clase base como
> privada, pero entonces mis funciones, en ved de recibir instancias de
> la familia de la clase, deberían pasar a recibir cualquier clase de
> cualquier familia que implemente la interface.
>
> A partir de ese momento, no podría hacer cosas como ejecutar código
> "sobre todas las clases que implementan XXX interface".


Buscando en Google .net get all objects given class, el primer hit
devuelve esto:

http://www.eggheadcafe.com/software/aspnet/33209268/get-all-objects-of-a-cert.aspx

No sé si aplica, pero de nuevo, me parece que no viene por el lado del
factory la mano.

>> Fijate que en el ejemplo de la Wikipedia, Button es una interface y
>> las factories te crean un objeto que se comporta como un Button
>> específico de una plataforma.
>
> Claro, pero eso abre la puerta, a que cualquiera implemente esa
> interface, en una clase que no tiene nada que ver. Digamos que vos
> tenés un algoritmo que quiere desactivar todos los Button mientras se
> ejecuta algún procedimiento. Entonces alguien crea un objeto
> clickeable, y por conveniencia implementa Button. Entonces ese objecto
> sigue siendo clickeable, y el usuario lo activa, arruinando el
> procedimiento que se está ejecutando. (Es un ejemplo traído de los
> pelos que acabo de inventar).


Exacto. Y a eso cómo lo vas a resolver cuando las clases que hereden
de tu clase base tampoco cumplan con los contratos? ;-) El compilador
de .Net controla esas cosas?

> O digamos que tengo 100000 objetos Button, y necesito buscar uno. Lo
> busco en un array ordenado, pero resulta que ese button específico no
> está en el array porque el que lo codificó no tenía idea de que tenía
> que agregarlo al array.


Podrías contar el problema específico que intentás solucionar buscando
los objetos en ese array? .Net debe tener un Object Space donde buscar
objetos y mucho más optimizado que la versión que hagas a mano.

Si lo que buscás es un invariante de clase, podrías definirlo con un
método de la clase base y todas las instancias de las clases que
heredan deberían cumplirlo. Así, en cualquier método dónde estés
esperando una instancia de la clase base, simplemente llamás al método
del invariante.

Se entiende la idea?
Edgardo
-- 
The mere formulation of a problem is far more essential than its solution,
which may be merely a matter of mathematical or experimental skills.
-- Albert Einstein