Feda /dev/

MisKo

Gentes de bien, Sabeis si Visual Studio incorpora un emulador de 'Microsoft surface' como hacen sus homologos (android, ios) ???

1 respuesta
desu
if(s instanceof ClassA) {
            processA(pars);
        }

if(s instanceof ClassB) {
          processB(pars);
}

No puedo refactorizar esta mierda me esta rallando. Ambos métodos dependen de ClassB las recibo en un Observador(class B). La unica diferencia es donde hago los prints, si dentro de un condicional o fuera. Es una estructura de árbol en un composite donde diferencio entre ojas y arboles.

3 respuestas
HeXaN

¿Para qué tocarlo si funciona? Primera regla del desarrollo de software.

edbusy

#20852 y tu duda es?

1 respuesta
desu

#20854 "No puedo refactorizar esta mierda me esta rallando. "

Lo normal sería meter el metodo process(pars) en la clase abstracta y con polimorfismo se resuelve sin instance of. Pero no puedo porque no tiene sentido que classA tenga las dependencias.

Tengo un compuesto que es un árbol, classA seria la hoja, classB seria el composite. Recibo esos parametros en classB que es un observador y tengo que procesar información que solo tiene sentido en classB.

Lecherito

Usar instanceof es uno de los mejores patrones y mas usados que hay

2 1 respuesta
desu

#20856 kekekek de los patrones de peores practicas dirás no? sé que a día de hoy la jvm ha arreglado el cuello que provoca esa mierda pero me gustaría evitarlo a poder ser.

drakkenspain

#20852

if (!(s instanceof ClassA)) {
  processB(pars);
} else if (!(s instanceof ClassB)) {
  processA(pars);
}

Espero haberte ayudado.

spoiler
6 1 respuesta
desu

#20858 hehe ni trollear sabeis algunos xd almenos hazlo bonito

if (isInstanceOfClassA(s)) proccessA(pars);
if (isInstanceOfClassB(s)) proccessB(pars);

Si alguien tiene curiosidad como he llegado ahí, necesito hacer propagaciones por el árbol de observadores sin modificar el estado del mismo.

1 respuesta
gohrum

Quiero subir un archivo a s3, pero veo que si quiero servir un archivo comprimido con gzip, tengo que comprimirlo antes.
He visto que hay varias funciones en php para hacer gzip de una cadena, sin embargo, al leer el archivo con el navegador, no se descodifica, incluso habiendo puesto el header de content encoding en el bucket.

alguna idea?

1 respuesta
Lecherito

#20860 Si

2
B

#20852 Si lo que quieres es ahorrarte el instanceof....

class ClassA {
 constructor() {
  this._type = 'classA';
 }
 
 get type() { return this._type; }
}

class ClassB {
 constructor() {
  this._type = 'classB';
 }
 
 get type() { return this._type; }
}

var s = new ClassA();
if (s.type === 'classA') { console.log("Haces A"); }
else if (s.type === 'classB') { console.log("Haces B"); }

s = new ClassB();
if (s.type === 'classA') { console.log("Haces A"); }
else if (s.type === 'classB') { console.log("Haces B"); }

Usar no usas instanceof :B

1 respuesta
desu

#20862 Ya lo pensé pero no deja de ser un mal diseño. Antes me pasaría un DTO por parámetro que sería bastante mejor por no tener información redundante en la clase.

Piensa que estoy en un observador y recibo por parámetro un objeto de la clase abstracta del compuesto. Entonces no puedo diferenciar si es una hoja o un compuesto, ni puedo crear interficies ni usar un dobledispatch.

Bueno lo voy a dejar así para que se externalizable. La solución la dije más o menos, si se quiere evitar esto de manera correcta, abstraer el metodo process() a la abstracta y añadirle campos sin sentido a la clase A. Ganas polimorfismo pierdes en acoplamiento/coherencia.

1 respuesta
B

#20863 Una mucho mejor...

try {
    processA(s);
}
catch(err) {
    processB(s);
}

xDD esto si es ayuda de la buena...

drakkenspain

#20859

Más bonito
1 respuesta
desu

#20865 Te falta meterlo dentro de un paquete java.enterprise.my.enterprise.java.src.project.resources.programmers.code.classes.polymorphic.instances.instanceofclass

Paso ya, arriba puse mi conclusión. Si alguien lo resuelve tremendo conocimiento de java. mis dies.

1 respuesta
Lecherito

#20866 Pero que conclusion, si nos has dado un ejemplo de mierda que ni siquiera se refleja con la realidad porque segun tu tiene otras dependencias que claseA no deberia tener o saber de ellas xdddd

1 respuesta
desu

#20867 Perdona, tengo una mente bastante hábil y con pocas palabras entiendo muy bien las cosas. Lo que no sé es programar xdd

Pues tienes un Compuesto típico, aciclico en mi caso.

Donde tus componentes tiene un estado que puede cambiar dependiendo del estado del árbol. Una rama puede afectar a otra si están conectadas.
Para detectar estos cambios le metes un observador. Component es observable y el compuesto el observador.

Cuando el estado en tiempo de ejecución cambia en una componente, necesito propagar por todo el árbol hasta llegar al observador más arriba de todo, es decir, el compuesto root. Sin modificar el estado del árbol, solo quiero observar el comportamiento por motivos de diseño. No cambio el estado del arbol, propago el futuro estado del árbol en una circunstancia concreta digamos.

El problema? Hoja y compuesto avisan al mismo observador y la dependencia esta en que usas variables internas del compuesto que no tienen sentido en la hoja, por ejemplo, una lista de hijos.

Si digo que las hojas tienen 0 hijos y hago métodos estúpidos ( seguramente esto se puede refactorizar con una plantilla o algo, no lo he pensado mucho, como getChildren() { return 0 }), podría meter un método en el componente (public abstract void process())para usar polimorfismo, de hecho si hago ésta guarrada de solución seguramente existen varias implementaciones. Para quitar un instanceof normalmente harías esto.

1 respuesta
Lecherito
#20868desu:

tengo una mente bastante hábil y con pocas palabras entiendo muy bien las cosas

Iba a contestar en serio pero es que no puedo.

xddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

2 respuestas
desu

#20869 jeje Me alegro de ser gracioso y de que mis bromas hagan gracia, como ves no me equivoco, tengo una mente hábil.

HeXaN

#20869 Si no has entiendo lo que plantea, no pasa nada.

1 respuesta
GlatoR

Hexan tiene para todos

desu

Haber obviamente si no sabes ni programar ni te plantees diseñar. Yo doy por supuesto que quien ha respondido a veces le pasan cosas parecidas.

1 respuesta
HeXaN
#20873desu:

Haber obviamente si no sabes ni programar ni te plantees diseñar.

Si no sabes castellano ni te plantees escribir en un foro español.

Vamos para bingo xD

2 1 respuesta
desu

#20874 A ver yo ya he dicho que no sé programar por eso he supuesto que hago algo muy mal de base.

no creo ni en la ortografia ni en el lenguaje, pienso que las palabras solo se ponen en medio de lo que realmente queremos transmitir, por eso nunca corrijo las faltas que se me marcan en el corrector. siento si te ofendo, pero te respeto.

2 respuestas
GlatoR

desu ya no se achanta de vosotros. La coalición de Zerok y desu es inminente

1
Lecherito

#20871 Sinceramente, casi ni he leido lo que ha escrito

1 respuesta
desu

#20877 De donde eres? Si eres de Barcelona quedamos y lo hablamos. A mi tampoco me gusta leer, prefiero escribir. Y si es comunicación real mejor.

Bueno he planteado un problema interesante de diseño ya que hay muchas limitaciones.

Markitos_182

#20875 eso se lo explicas al compilador/intérprete cuando programes.

GlatoR

Yo es que no sé, desu, sino te diría algo xd

1 respuesta
Tema cerrado