¿Cómo puedo desaprobar las funciones de javascript expuestas flash/flex?

Desarrollamos un componente flexible que ahora es utilizado por varias aplicaciones web. Descubrimos que algunas devoluciones de llamada son antiguas y tienen malos argumentos. Por ejemplo, cuando se usan para establecer algún parámetro, toman un objeto, mientras que cuando obtienen el mismo parámetro, usan otro objeto. Nos gustaría hacer que estas funciones sean coherentes al establecer y obtener parámetros. Así que pensamos en comenzar a desarrollar nuevos getters y setters sobre ellos con nuevos nombres y los parámetros correctos. De todos modos, dado que el componente es utilizado por muchas otras aplicaciones, no podemos cambiar el nombre de las devoluciones de llamada, ni cambiar su implementación, podríamos tener problemas con las otras aplicaciones web. Por lo tanto, nos gustaría saber si hay alguna forma de hacer que las devoluciones de llamadas expuestas a flash queden obsoletas, de modo que las personas que usan estos métodos vean algunas advertencias y comiencen a sustituirlas por la versión no obsoleta. ¡Gracias de antemano por sus respuestas!

preguntado el 22 de mayo de 12 a las 11:05

2 Respuestas

Una vez que una API, siempre una API.

No puede simplemente eliminar cosas de la API o, de lo contrario, las aplicaciones que actualmente usan esos comandos fallarán. Simplemente agregue una nueva API de reemplazo y conserve las antiguas. Indique en los documentos que los antiguos están en desuso y que hay un mejor comando para ello.

Un ejemplo de esto es jQuery's live() y delegate() que fue reemplazado por on(). Aunque en desuso, live() y delegate() todavía existen en 1.7 para acomodar la API antigua, especialmente para aquellos que actualizaron la biblioteca pero usan un complemento obsoleto y sin mantenimiento.


También podrías hacerlo así. Puede revelar la misma interfaz para la API anterior, pero debajo de ella, utiliza la implementación de las nuevas API pero con un poco de modificación. De esa manera, no estarás repitiendo tu código.

Por ejemplo, tomemos jQuery delegate(), live() y on(). Estos no son los códigos reales de estos métodos, pero busco el concepto de desaprobación (no puedo pensar en otros ejemplos de desaprobación que no sean delegate(), live() y on()).

//the three have different set-ups
.live(event,callback);
.delegate(selector,event,callback);
.on(event,selector,callback);

//to avoid multiple underlying implementations
//you can "map" the old API to use the new API's implementation
//while maintaining the old interface and functionality
live = function(event,callback){
    $(document).on(event,callback);
}
delegate = function(selector,event,callback){
    $(this).on(event,selector,callback);
}

//the new implementation as used by on
on = function(event,selector,callback){
    //implementation
}

contestado el 22 de mayo de 12 a las 14:05

Entonces, como pensamos, no hay una forma adecuada de hacerlo, excepto escribirlo en la documentación. Esperaré a ver si hay alguna idea creativa, para juntar automáticamente desaprobaciones. Gracias - m3rlino

¡Interesante comparación con jQuery! Supongo que podría considerar registrar una advertencia en la consola del navegador para informar a aquellos que no usan RTFM que el método ahora está obsoleto. - net.uk.dulce

Bueno, creo que tu idea es bastante buena, pero necesitaba la información porque la función debería devolver un objeto diferente, por lo que no puedo ocultar nuevas funciones dentro de los métodos heredados. De todos modos, ¡gracias por tu ayuda! :) - m3rlino

Algunas cosas que no están claras:

  1. ¿Quién está construyendo el lado Flash del código? ¿Las personas que usan el componente, o lo compilan y no tienen idea de lo que hay dentro?

  2. ¿Qué tan inteligente es en general la audiencia?

  3. ¿Cuál es el tiempo de vida general de las aplicaciones creadas con el componente? ¿Hiciste explícitas tus políticas de versión?

OMI: (lo que significa que esta es solo mi opinión, no una verdad absoluta, este enfoque es más típico para el desarrollo de Linux, pero aterrador / atípico para Windows, por ejemplo).

Ahora, si sus usuarios están creando su código, diría que vaya directamente a [Deprecated()] meta para 2-3 lanzamientos de versiones menores y suéltelo después de eso, ciertamente no lo arrastre a un lanzamiento de versión principal. Es bueno brindar algo de soporte para la versión anterior y, posiblemente, lanzar parches, si tiene un ancho de banda para ello, pero mejorar es más importante. Ciertas tácticas pueden ayudar. Por ejemplo, si los usuarios estuvieron expuestos a productos beta, es más probable que adopten el cambio más rápido.

Si su audiencia es en su mayoría inteligente / tiene buenas comunicaciones con la comunidad, probablemente una sola versión menor sería suficiente; en el peor de los casos, quedarían pocas con la versión anterior compatible. Una vez más, es bueno si tiene parches para la versión anterior, pero se atará las manos manteniendo la API incorrecta y después de un tiempo debido a esa API, sus usuarios considerarán su aplicación como una basura obsoleta, lo que los obliga a usar cosas que preferiría cambiar.

Es muy importante prometer solo consistencia entre versiones menores. Por supuesto, es bueno si puede mantener varias versiones compatibles con versiones anteriores, pero esto es una ventaja más que un requisito. Si bien en la superficie otras personas que usan su producto pueden ser reacias a adoptar el cambio, la otra opción es aún peor. Debe haber una cantidad de tiempo razonable, que se ajuste al tiempo de vida promedio de la aplicación, para que brinde soporte. Algo que no haría que una aplicación promedio quedara obsoleta antes de que sea útil, pero todo con moderación.

contestado el 22 de mayo de 12 a las 13:05

Bueno, respondiste parcialmente mi pregunta, pero creo que al final tu opinión es útil. Responderé a su pregunta: 1. Estoy creando el código flexible y otras personas deberían usarlo a través de la API de JavaScript. 2. La audiencia la forman los programadores. 3. La vida útil de las aplicaciones no es poca, por ahora el componente se ha utilizado desde 2009, de todos modos no hice la versión inicial, pero tuve que cambiar ese componente en el pasado y desarrollé varias características. - m3rlino

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.