comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

Introduciendonos a la Programacion Orientada a Aspectos en PHP

  • 5 Respuestas
  • 2131 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Destructor.cs

  • *
  • Underc0der
  • Mensajes: 68
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« en: Agosto 10, 2013, 03:40:55 pm »
Cualquiera que ande dando vueltas por internet e investigando habrá escuchado alguna que otra vez algo llamado Progrmacion Orientada a Aspectos y en su intento por aprender de que se tratara tendría como resultado dolor de cabeza, ya que la documentación que hay sobre el tema es muy poco entendible! (y mas para gente de mi edad)

Aún asi, yo he seguido investigando y he encontrado un gran tutorial para iniciarse, el cual estaba en ingles y hoy me he decidido a compartirlo con la comunidad, dandome la molestia de traducirlo para ustedes

Espero que sea de gran ayuda para todos:

Introduccion:

AOP (Programacion orientada a aspectos en ingles) es una extención de PECL que nos da la posibilidad de usar Programación Orientada a Aspectos en PHP, sin la necesidad de compilar o realizar algun otro paso intermedio antes de publicar tu código.

La extención AOP esta diseñada para ser la manera mas facil en la que podemos pensar a la hora de incluir Programacion Orientada a Aspectos en PHP

La POA tiene como objetivo permitir la separacion de funcionalidades transversales (caché, logs, seguridad, memoria, etc)


 Tutorial basico:

Mira la siguiente clase:

Código: PHP
  1. <?php
  2.     class MyServices
  3.     {
  4.        public function doAdminStuff1 ()
  5.        {
  6.           //some stuff only the admin should do
  7.           echo "Calling doAdminStuff1";
  8.        }
  9.  
  10.        public function doAdminStuff2 ()
  11.        {
  12.           //some stuff only the admin should do
  13.           echo "Calling doAdminStuff2";
  14.        }
  15.     }
  16. ?>

Ahora quieres que tu código sea seguro, solo quieres que los administradores puedan llamar a los metodos doAdmin.

¿Qué soluciones existen?
 -Añadir algo de codigo para chequear credenciales dentro de tu clase. Lo malo es que va a ensuciar tu código y tu servicio se va a volver menos legible
-Deja la responsabilidad de chequear las credenciales a los usuarios cuando se requiera. El punto negativo es que vas duplicar tu código del lado del cliente si tienes que llamar al servicio de diferentes lugares
-Agrega una especie de proxy el cual chequearía las credenciales antes de llamar al servicio actual. El lado negativo es que tendrías que escribir código extra, agregando otra clase en la parte superior del servicio!

Mas aún, estas soluciones suelen incrementar su complejidad a medida que agregas mas funcionalidades tranversales!

Aquí es donde la POA entra en juego dandote la posiblidad de decirle a PHP que haga algunas acciones extras a la vez que llama a los metodos de nuestro servicio

Primero escribiremos el código el cual verificará si somos capaces de llamar al servicio del administrador
Código: PHP
  1. <?php
  2.     function adviceForDoAdmin ()
  3.     {
  4.        if ((! You are not allowed to view links. Register or Login($_SESSION['user_type'])) || ($_SESSION['user_type'] !== 'admin')) {
  5.           throw new Exception('Sorry, you should be an admin to do this');
  6.        }
  7.     }
  8. <?
El código es simple, verifica si hay algo que nos diga si el usuario que esta intentando acceder al servicio es un administrador! Seguramente a la hora de verifcar usted haga uso de un código mas complejo, aún asi, este sirve para esta pequeña demostración!

Ahora simplemente usaremos la extención para que ejecute este código antes de intentar ejecutar cualquier método de nuestro servicio
Código: PHP
  1. <?php
  2.     aop_add_before('MyServices->doAdmin*()', 'adviceForDoAdmin');
  3. ?>

Ahora cada vez que intentemos ejecutar un método de nuestro servicio, AOP hará que se ejecute la funcion para verificar si en verdad es un administrador!

¿No es realmente simple?
Ahora probemos nuestro servicio:

Código: PHP
  1. <?php
  2.     //session is started and we added the above examples to configure MyServices & basicAdminChecker
  3.  
  4.     $services = new MyServices();
  5.     try {
  6.        $services->doAdminStuff1();//will raise an exception as nothing in the current session tells us we are an admin
  7.     } catch (Exception $e) {
  8.        echo "You cannot access the service, you're not an admin";
  9.     }
  10.  
  11.     $_SESSION['user_type'] = 'admin';//again, this is ugly for the sake of the example
  12.  
  13.     try {
  14.        $service->doAdminStuff1();
  15.        $service->doAdminStuff2();
  16.     } catch (Exception $e) {
  17.        //nothing will be caught here, we are an admin
  18.     }
  19. ?>

Extraido y traducido de: You are not allowed to view links. Register or Login
« Última modificación: Agosto 14, 2013, 03:10:05 pm por Destructor.php »

Desconectado Xt3mP

  • *
  • Underc0der
  • Mensajes: 432
  • Actividad:
    0%
  • Reputación 0
  • Ellos me están buscando, pero yo los encontraré.
    • MSN Messenger - Xt3mP@h4x0rz.us
    • AOL Instant Messenger - Xt3mP@h4x0rz.us
    • Yahoo Instant Messenger - Xt3mP@h4x0rz.us
    • Ver Perfil
    • Xt3mP
« Respuesta #1 en: Agosto 12, 2013, 10:38:27 pm »
Para mayor información: You are not allowed to view links. Register or Login
Cada vez que me das Karma me motivas

Desconectado Destructor.cs

  • *
  • Underc0der
  • Mensajes: 68
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #2 en: Agosto 12, 2013, 10:53:59 pm »
Me olvidaba de la fuente! Ya lo arreglé

Desconectado alexander1712

  • *
  • Underc0der
  • Mensajes: 850
  • Actividad:
    0%
  • Reputación -2
    • Ver Perfil
    • El blog del programador
    • Email
« Respuesta #3 en: Agosto 14, 2013, 02:02:16 pm »
en mi opinión, me parece muy poco práctico, y no veo ninguna razón para utilizarlo, quizá tenga que ver los detalles, pero debería aparecer de entrada los motivos por los cuales alguien debería usar esto, las ventajas y las que nunca deberían faltar deventajas.

pero bueno, es bueno saber que existe y se agradece el tiempo que te haz tomado en traducirlo y publicarlo.

por cierto tienes un pequeño error que da a confusión:

Citar
AOP (Programacion orientada a objetos en ingles) es una extención de PECL que nos da la posibilidad de usar Programación Orientada a Aspectos en PHP, sin la necesidad de compilar o realizar algun otro paso intermedio antes de publicar tu código.

es programación orientada a objetos la sigla, o programación orientada a aspectos? no queda muy claro el parentesis.

un saludo!

Desconectado Destructor.cs

  • *
  • Underc0der
  • Mensajes: 68
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #4 en: Agosto 14, 2013, 03:13:06 pm »
Ahí ya arrele, fue solo una confusión!
Sobre si es bueno o no, seguramente se aprecie mas en aplicaciones mas complejas, aún asi, he leido muchos artículos que han "alagado" este nuevo paradigma y por eso lo he publicado!

Desconectado alexander1712

  • *
  • Underc0der
  • Mensajes: 850
  • Actividad:
    0%
  • Reputación -2
    • Ver Perfil
    • El blog del programador
    • Email
« Respuesta #5 en: Agosto 15, 2013, 11:21:03 am »
You are not allowed to view links. Register or Login
Ahí ya arrele, fue solo una confusión!
Sobre si es bueno o no, seguramente se aprecie mas en aplicaciones mas complejas, aún asi, he leido muchos artículos que han "alagado" este nuevo paradigma y por eso lo he publicado!

como dije, se agradece que te tomes el trabajo de venir a comentarnos a todos que esto existe y como funciona, la verdad es que no lo había visto nunca.

si, veremos que pasa.

saludos!

 

¿Te gustó el post? COMPARTILO!



Facebook lanza Hack, un nuevo lenguaje de programación basado en PHP

Iniciado por Destructor.cs

Respuestas: 7
Vistas: 1943
Último mensaje Abril 03, 2014, 10:38:22 pm
por fermino
Resultados concurso de programación - El Mejor programador de Underc0de

Iniciado por alexander1712

Respuestas: 4
Vistas: 1868
Último mensaje Noviembre 03, 2012, 04:41:55 pm
por Pr0ph3t
[LIBRO] Programación en PHP5 - Nivel Básico

Iniciado por graphixx

Respuestas: 0
Vistas: 901
Último mensaje Julio 28, 2015, 04:47:48 am
por graphixx
85 PDF de las principales editoriales sobre la programación PHP

Iniciado por graphixx

Respuestas: 2
Vistas: 1693
Último mensaje Junio 07, 2018, 06:54:51 pm
por eervv
Programacion web PHP + MySQL

Iniciado por ANTRAX

Respuestas: 0
Vistas: 1129
Último mensaje Febrero 24, 2013, 10:26:52 pm
por ANTRAX