[pyar] Programación Orientada a Aspectos (POA)

Ernesto Savoretti esavoretti en gmail.com
Jue Sep 23 02:07:15 ART 2010


A ver. Antes de este thread yo sabía tirando a nada de aspect oriented
programming y consecuentemente tampoco sabía que la forma más directa
de expresarlo en Python es a través de la implementación de
decoradores.
Coincido con Pablo en que la mayor parte de la documentación que
existe sobre decoradores en Python no hace mención a AOP, pero bueno,
la idea no es resucitar una discusión sino compartir a través de un
ejemplo lo que este thread me sirvió para aprender.
Para espanto de los sufridos pythonistas, va el ejemplo:

Supongamos que tenemos 2 funciones, por ej:
def edit_article(request):
    ...

y

def change_user_mail(request):
    ...

estas funciones tienen cada uno un objetivo espécifico, planteado en
el nombre de las mismas, y por ende deberán contener código específico
para cumplir su tarea.
Pero supongamos que además, para ser ejecutadas, el usuario debe
haberse acreditado en el sistema.
Uno podría resolver esto con:

def edit_article(request):
    if not request.user.is_authenticated():
         #mandalo a que haga login

y lo mismo en la otra función.
Pero este enfoque tiene 2 problemas:
1) Se repite código innecesariamente
2) Se mezcla código específico de la función con código que no tiene
nada que ver con la tarea a cumplir, cual es el de verificar las
credenciales del usuario.

En Django, esto se resuelve con el decorador:

@login_required
def edit_article(request):

Con esto, el código dentro de la función se dedica "a lo suyo", la
función queda "limpita", y el código de validación queda "inyectado"
por el decorador "desde afuera" (esto último es un barbarismo, pido se
me conceda la licencia)
Me parece que el ejemplo sirve para ver una implementación "de la vida
real" de porque los decoradores pueden implicar una implementación de
AOP, y a entender un poco más (aunque sólo sea rasgar la superficie)
de lo que es AOP en sí.

Mis saludos.

-- 

                                    Ernesto Savoretti



More information about the pyar mailing list