con mi poca experiencia en AOP (no la he usado en proyectos grandes de verdad), te voy a poner otro ejemplo (el tipico que se suele usar para explicar esto) con lo que a lo mejor entiendes mejor de que va la historia y su utilidad
el ejemplo es, hacer los logs de aplicacion
imaginate que tienes una aplicacion, y que quieres que siempre que se llame a un metodo de cualquier clase, en el log se escriba una linea (indicando el nombre, los parametros pasados, etc)
lo puedes hacer de muchas formas, la normal, la clasica, ha sido llamar a un metodo de otro objeto que se encargue de escribir en el log, y hacer esta llamada al principio de cada metodo...
en aplicaciones grandes y complicadas, eso acaba teniendo varios problemas:
- si a algun programador se le olvida hacer esto, el log queda incompleto y puede faltar informacion
- aniade complejidad y tamanio a cada uno de los metodos, a veces eso complica el leer un metodo y entender que hace (exige mas trabajo)
- si de repente se quiere cambiar el metodo de logs, habria que cambiar todas y cada una de las clases de la aplicacion (este problema es menor, pues los IDEs de hoy en dia ayudan bastante en esto, por otro lado una busqueda de texto te sacara la mayoria o todas las ocurrencias y demas, sin embargo el problema viene al tener que comprobar la aplicacion para ver que no has aniadido nuevos bugs (si, pruebas unitarias y demas ayudan, pero hay casos en que es complicado), sobre todo si tienes una aplicacion como la que tengo yo por aqui con 26.000 clases diferentes...
aqui es donde el AOP viene muy a mano, creas un aspecto que sea "log" y dices que todas las clases de tu aplicacion lo llamen
log resuelto, sin aniadir nada (o casi nada) a las clases existentes y todo programado en un lugar centralizado, si quieres cambiar algo, con irte al aspecto, todo solucionado
por supuesto, tiene muchisimas mas utilidades, este es el ejemplo que se usa siempre por ser sencillo y facil de explicar, otro ejemplo seria para la autenticacion del usuario en aplicaciones donde eso se tiene que realizar varias veces (para comprobar si tiene permisos para hacer una accion o para saber si ya esta autentificado), puedes crear un aspecto que compruebe eso y utilizarlo en donde quieras de tu aplicacion sin aniadir complejidad a las clases especificas
espero haberme explicado bien y que se me entendiera... en general el AOP me parece una cosa muy util para completar OOP, que aniado cierta complejidad pero que ayuda y mucho a hacer las cosas mas simples...
--
Dale fuego a un hombre y estara caliente un dia, prendele fuego y estara caliente el resto de su vida.
Re:aspectos
(Puntos:0)no entiendo que mejoras aporta el ejemplo puesto de AOP, con respecto al anterior codigo
Re:aspectos
(Puntos:3, Informativo)( http://barrapunto.com/ | Última bitácora: Lunes, 24 Febrero de 2014, 10:03h )
el ejemplo es, hacer los logs de aplicacion
imaginate que tienes una aplicacion, y que quieres que siempre que se llame a un metodo de cualquier clase, en el log se escriba una linea (indicando el nombre, los parametros pasados, etc)
lo puedes hacer de muchas formas, la normal, la clasica, ha sido llamar a un metodo de otro objeto que se encargue de escribir en el log, y hacer esta llamada al principio de cada metodo...
en aplicaciones grandes y complicadas, eso acaba teniendo varios problemas:
- si a algun programador se le olvida hacer esto, el log queda incompleto y puede faltar informacion
- aniade complejidad y tamanio a cada uno de los metodos, a veces eso complica el leer un metodo y entender que hace (exige mas trabajo)
- si de repente se quiere cambiar el metodo de logs, habria que cambiar todas y cada una de las clases de la aplicacion (este problema es menor, pues los IDEs de hoy en dia ayudan bastante en esto, por otro lado una busqueda de texto te sacara la mayoria o todas las ocurrencias y demas, sin embargo el problema viene al tener que comprobar la aplicacion para ver que no has aniadido nuevos bugs (si, pruebas unitarias y demas ayudan, pero hay casos en que es complicado), sobre todo si tienes una aplicacion como la que tengo yo por aqui con 26.000 clases diferentes...
aqui es donde el AOP viene muy a mano, creas un aspecto que sea "log" y dices que todas las clases de tu aplicacion lo llamen
log resuelto, sin aniadir nada (o casi nada) a las clases existentes y todo programado en un lugar centralizado, si quieres cambiar algo, con irte al aspecto, todo solucionado
por supuesto, tiene muchisimas mas utilidades, este es el ejemplo que se usa siempre por ser sencillo y facil de explicar, otro ejemplo seria para la autenticacion del usuario en aplicaciones donde eso se tiene que realizar varias veces (para comprobar si tiene permisos para hacer una accion o para saber si ya esta autentificado), puedes crear un aspecto que compruebe eso y utilizarlo en donde quieras de tu aplicacion sin aniadir complejidad a las clases especificas
espero haberme explicado bien y que se me entendiera... en general el AOP me parece una cosa muy util para completar OOP, que aniado cierta complejidad pero que ayuda y mucho a hacer las cosas mas simples...
Dale fuego a un hombre y estara caliente un dia, prendele fuego y estara caliente el resto de su vida.