domingo, 26 de agosto de 2012

PHP Correcto (parte 2)

Continuando con la mini guía, para conseguir una mayor eficiencia y eficacia en nuestras habilidades como programadores.

El el primer post, hablamos de los pasos a seguir para ser buenos programadores, los enumeramos y seguiremos con la numeración, pero antes un paréntesis, hablamos de que debemos elegir un framework, empezar a usarlo y familiarizarse con el, esto es absolutamente necesario si queremos ser mejores programadores, es importante notar que no es bueno hacernos el programador macho que todo lo puede hacer y desde cero, no tiene nada de malo crear grandes cosas "ensamblando", como programadores debemos aprender de otros, los programadores son una comunidad. No, no hablo de los script kiddies que se la pasan siguiendo tutos, copiando y pegando código sin entender nada, no estoy diciendo que seguir tutos y que copiar y pegar código este mal, si no que hay que experimentar con el código copiado, pero sobre todo leer mucho, mucha teoría, la practica no se comprende sin teoría previa de lo contrario no sabrás que hace lo que acabas de copiar y pegar.

Bueno después del paréntesis, entremos en detalle. los siguientes pasos:

4.- Leer y aprender sobre patrones de diseño, los siguientes, evidentemente no son todos, pero son los mas usados y muchos se mezclan:

         MVC (Model-View-Controller) el patrón modelo vista controlador, consiste en dividir nuestras aplicaciones en 3 capas, a saber:

                      Modelo que cosiste en toda la lógica de negocio, mas fácilmente en la forma como se almacenan nuestros datos, como se recuperan, hacer una abstracción de estos datos es lo mas usual, por ejemplo usar un ORM que es un mapeo objeto relacional, donde las entidades de la base de datos se transforman en objetos dentro del programa.

                      Vista es la capa de presentación de datos, donde no se mezcla nada del funcionamiento o tratamiento de los datos.

                      Controlador se encarga de responder a los eventos generados por el usuario a través de la vista, procesar datos "servidos" por el modelo, en general es la lógica de funcionamiento de nuestro programa.

          Este patrón, ofrece muchas ventajas a la hora de escalar nuestros programas, ademas de que permite a equipos de desarrollo trabajar de forma mas eficiente y ordenada.

         DI (Dependency Injection) inyección de dependencias, consiste en que el acoplamiento o dependencia entre nuestros módulos (clases) sea suministrada a través de la parametrizacion en objetos de las clases que requieran, en vez de que ellas mismas los creen, es decir, la clase A necesita a la clase B, inyectar esa dependencia seria que por medio del constructor de A o un setter se le envié (parametrice) dicha dependencia, ejemplo:
                     objeto = new ClaseA(new ClaseB())
                     //por un setter
                     objeto = new ClaseA()
                     objeto.setClaseB(new ClaseB())
         La forma mas común de implementar este patrón es por medio de un contenedor de dependencias, que suministra los objetos a cada clase con forme los necesitan, esta relación de dependencias puede ser plasmada en un fichero de configuración, esto va muy ligado a la inversión de control.

         IoC (Inversion of Control) Inversión de Control es un concepto un tanto escurridizo, consiste en simple y llanamente invertir el "flujo del programa" tipicamente estamos acostumbrados a la programación imperativa donde, le decimos como hacer las cosas a un modulo o programa, luego hacemos procedure calls o llamadas a funciones durante el funcionamiento de nuestro programa, en la inversión de control esperamos respuestas, ejemplo: en el patrón anterior (DI) vimos que la forma de implementar DI era por medio de un contenedor de dependencias, pues bien, este contenedor de dependencias es un IoC ya que es el quien llama a nuestras clases, esto suele usarse cuando una biblioteca implementa estructuras de alto nivel y es el usuario (programador) quien implementa las tareas de bajo nivel, esto es muy común en los frameworks de desarrollo, donde un contenedor se encarga de crear las instancias de los objetos creados por el usuario.

        existen otros que también son importantes de estudiar, como son singleton, factory, strategy, adapter y decorator, aquí pueden ver una explicación excelente para entenderlos: http://www.baluart.net/articulo/introduccion-a-los-patrones-de-diseno-con-php 

5.- A cuantos de nosotros no nos paso, que mientras codificamos nuestros scripts, tendíamos a probarlos directamente sobre nuestro navegador, tratando de simular la actividad de un usuario. Pero luego sufríamos cuando nos aparecían errores que no sabíamos de donde salían, conforme nuestro desarrollo crecía, se volvía mas tortuoso este tema. Esto nos hace perder tiempo y esfuerzo, la razón es porque en realidad esta forma de desarrollar es muy improvisada si bien la mas rápida para desarrollos cortos, para largos es una tortura. Una buena practica de programación, es aprender a manejar las excepciones y a implementar pruebas unitarias.

            Las pruebas unitarias no son mas que el testeo de rutinas que realizan una tarea concreta, pero desacopladas totalmente de la aplicación donde serán destinadas, de forma que al hacerle pruebas únicamente a un "trozo" de código, sabremos exactamente donde esta el error en caso de que se presente, ademas de que sabremos hacerle todos los "supuestos" cosa imposible de hacer una vez "montada" toda la aplicación,  una herramienta que nos ayuda a esta tarea es PHPUnit, este es un framework para implementar nuestras pruebas. Al principio aprender a usar este framework nos resultara una perdida de tiempo o que realmente no sirve, pero a la larga, ahorrara mucho esfuerzo y con esto logramos darle una robustez a nuestros desarrollos como nunca antes se la habíamos dado, esto diferencia a los buenos programadores de los demás.

            Control de excepciones, con esto hacemos que nuestro programa no se paralice completamente, sabemos que sucede exactamente y podemos tomar decisiones al ocurrir una excepción, a esto se le llama cachar una excepción. Otro uso es que si tenemos un modulo que sera usado por otro, con esto podemos avisar a dicho modulo que ha ocurrido un error a esto se le llama lanzar una excepción. PHP en sus versiones recientes, permite el manejo de las excepciones, aunque todavía no lo hace con las funciones nativas, si podemos hacerlo con las nuestras e incluso personalizarlas. Con esto damos mayor robustez a nuestros programas también.

Continuaremos en la próxima con lo que considero la cima de esta montaña.

Saludos. :)


No hay comentarios.:

Publicar un comentario