Alfredo Juarez

Power to programmer...

Archive for the 'Programación' Category

Mon, Jul 7th, 2008
posted by alfredojv 05:07 PM

La mayoría de aplicaciones requieren de interacción con una base de datos, ya sea del tipo relacional u orientada a objetos y en la mayoría de los casos la persistencia de datos está mezclada con la lógica del negocio. Lo que supone un problema a la hora de querer cambiar el motor de base de datos.

Para entenderlo mejor formularemos un ejemplo de la vida real.

Imaginemos que estamos desarrollando una aplicación en la empresa donde trabajamos y estamos utilizando MySQL como motor de base de datos. Estamos en la fase de pruebas (ya a punto de publicar el producto final), y por alguna extraña razón a tu jefe se le ocurre que mejor deberíamos usar Oracle, por que se lo recomendaron, piensa que es mejor, etc.

Que pasa si tenemos todo mezlcado (lógica del negocio, métodos de acceso a datos, etc),  se convierte en una tremenda pesadilla.

Para nuestra suerte existe el patrón de diseño Data Access Object (DAO), que se encarga de encapsular la interacción de una aplicación con la base de datos.

¿Como funciona?

DAO encapsula el acceso a la base de datos, de esta manera cuando la capa de lógica de negocio necesite interactuar con la base de datos, ésta utilizará los métodos ofrecidos por DAO. Generalmente la clase de operaciones que ofrece la capa de datos se le conoce como CRUD (Create, Read, Update y Delete).

Cuando la capa de negocios necesite almacenar datos (por ejemplo) solo tendrá que hacer referencia al método correspondiente para insertar los datos de la clase DAO, de esta manera si en algún momento se llegara a optar por usar otro motor de búsquedas, la capa del negocio no se debe preocupar ya que sólo bastará con actualizar la capa de datos. Si hablamos de patrones algunos detectarán por aquí que se están delegando responsabilidades, una buena práctica de la orientación a objetos.

De hecho el método de persistencia no debe de interesarle a la capa de negocios, es decir, a él no le importa si los datos se guardan en una tabla MySQL, XMl, Texto plano o se imprime, de esto se encarga DAO.

Por cada tabla de una base de datos relacional existirá un DAO. Esto consiste básicamente en una clase que es la que interactúa con la base de datos. Los métodos de esta clase dependen de la aplicación y de lo que queramos hacer. Pero generalmente se implementan las 4 funciones básicas (también conocidas como métodos CRUD).

Una vez entendido el funcionamiento de DAO, es conveniente explicar un nuevo término que nos será de ayuda para completar la implementación de nuestra capa de persistencia. Se trata de los DTO’s (Data Transfer IObject), los cuáles son utilizados por DAO para transportar los datos desde la base de datos hasta la capa de lógica de negocio o vice versa.

En pocas palabras un DTO es un objeto que en su interior tiene como atributos los mismos atributos del modelo, con sus correspondientes accessors (Setters y Getters).

dao-diagram.png

Diagrama DAO

Ahora veamos un ejemplo

Tenemos una aplicación que entre una de sus tantas funciones es controlar los datos de  clientes, y queremos usar DAO para el manejo de la persistencia de dicha aplicación.
Primero que nada de define el modelo 8en este caso de clientes), para después partir con la codificación de los respectivos DTO y DAO.

DTO

Class ClientesDTO
{
      private $id;
      prívate $nombre;
      prívate $direccion;

      public static function getID( )
      {
          return $this->id;
      }

      public static function getName( )
      {
          return $this->nombre;
      }

      public static function getAddress( )
      {
          return $this->direccion;
      }

      /* Setters */
      Public static function setID( $id )
      {
          $this->id = $id;
      }
      Public static function setName( $name )
      {
          $this->nombre = $name;
      }
      Public static function setAddress( $address )
      {
          $this->direccion = $address;
      }
}

DAO

class clientesDAO
{
     public static function create( $dto )
     {
          /* implementación para la creación de un nuevo registro */
     }

      /* aqui van los demás metodos CRUD */
}

Por obvias razones no escribí todo el código necesario ya que este artículo es meramente informativo, pero pienso que es explicito el ejemplo para comprender el uso del patrón DAO.
En la próxima entrega les mostraré un ejemplo más real, utilizando una mezcla de patrones, como el DAO, Singleton, Factory y Façade.

Wed, Jul 2nd, 2008
posted by alfredojv 03:07 PM


Estas pueden ser buenas y malas noticias, ya que por un lado los desarrolladores ya no podemos poner el pretexto de no hacer webs en flash por que son anti-buscadores, es decir, los bsucadores no pueden indexar su contenido por estar hechas en flash.

Por otro lado los clientes se verán beneficiados, ya que ahora podrán tener sus webs llenas de vida (a los que les gustan las páginas en Flash).

Google y Adobe hicieron una alianza para que el buscador pudiera indexar el contenido de los flash. Siendo anunciado unos días atrás que Google ha desarrollado un algoritmo con el cuál será posible la indexación.

Ahora si que no hay pretextos, si un cliente lo quiere en flash….

Links

Desarrollo Web

Thu, Jun 19th, 2008
posted by alfredojv 10:06 AM

Según un informe realizado por la consultora EvansData, quién realizó una encuesta se afirma que sólo un 8% desarrolla para Windows Vista, también se dice que para el 2009 las cosas pueden mejorar, ya que se espera que aumente el número de desarrolladores interesados en Vista a un 24%.

¿Será acaso el principio del fin del gigante de la informática?, empezando a sufrir lo que sufría Linux en sus inicios, donde nadie se interesaba en desarrollar para ellos, que ahora se ve menos este problema.

¿Qué tendrá planeado el monstruo de los tentáculos para solventar este tremendo problema?. Si bien es cierto gran parte de los desarrolladores siguen en Windows XP, muchísimos han hecho su transición a OS X, y muy confirmado quedó en la pasada WWDC, quienes batieron el récord de asistentes dejando a muchos en la cola de espera, por falta de lugares.

Al leer esta noticia me surgen muchas preguntas, que en un futuro no muy lejano se irán contestando solas.

Mon, Jun 9th, 2008
posted by alfredojv 04:06 PM

Una keynote muy monotemática, el iPhone se vio mencionado a lo largo de ésta. Acerca del Snow Leopard solo se mencionó que se iba a cubrir a lo largo de la semana pero no se especificó nada al respecto.

En resumen:

Se presentaron desarrolladores con ejemplos de aplicaciones para el iPhone, en donde se vieron juegos y aplicaciones médicas.

Después se presentó el rumoreado Mobile ME, el cuál es una renovación del ya enterrado .Mac. Que trae consigo mejoras muy notables.

  • Hasta 20gb de almacenamiento
  • Mail
  • Contactos
  • Calendario
  • Fotos

Por solo 99 dólares anuales.

Y luego siguió el tan esperado anuncio del iPhone 3G, ese que todo el mundo andaba diciendo y maldiciendo alrededor de la blogosfera, prensa escrita, televisión, etc.

Ahora por fin quedó confirmado la segunda generación del famoso iTelefonito, y lo que es mejor, con una contundente rebaja de precio, tal cómo lo dice la página de Apple: “El doble de rápido, a mitad de precio”

Como bien comentó Steve jobs, ahora estará disponible en muchos paises, que dicho sea de paso también incluye méxico, siendo telcel la operadora encargada de distribuirlo por estos rumbos.

El precio de inicio será de USD$199 para la versión de 8gb, y estará disponible desde el día 11 de julio de los corrientes. Solo falta esperar las sorpresas que nos tenga telcel. Así que hay que mantener la cartera guardada por el momento.

Si además de eso quieres conocer un poco de lo que poco se mencionó puedes ir a este link para leer el comunicado de prensa oficial. Y por si no sabes de que hablo me refiero al poco sonado Snow Leopard, el cual planean que esté disponible dentro de un año.

Mon, Jun 9th, 2008
posted by alfredojv 09:06 AM

En unos cuantos minutos dará inicio la tan esperada keynote de Steve Jobs, en el marco de la WWDC’08, que dicho sea de paso por primera vez en la historia se vendieron todas las entradas del evento.

Como ya lo comenté por estos lares la lista de rumores es grande, y tenemos una tarjeta de bingo para ir pasando lista de los que se cumplan.

En esta ocasión no tuve la oportunidad de asistir, pero igual estaré pendiente de las cosas que sucedan.

si les interesa el tema, o quieren saber a primera hora las novedades presentadas por Steve Jobs, pueden seguir las coberturas en vivo que harán algunos blogs que les dejaré a continuación.

Gizmodo

Engadget

Ars Technica

la foto que acompaña la entrada fue tomada prestada de gizmodo.

Wed, Jun 4th, 2008
posted by alfredojv 10:06 AM

siendo sincero no se si tenga algo que ver, ni tampoco es algo relevante, pero bueno aquí se los dejo para los curiosos.

Via aNieto2k

Fri, May 30th, 2008
posted by alfredojv 10:05 AM

Todo parece indicar que Google implementará un modelo parecido al App Store, que anunciara Apple en la pasada Keynote donde se presentó el iPhone SDK, el cuál consiste en una “tienda online” de aplicaciones para el dispositivo.

De momento la Android Store no ha sido oficialmente confirmada, pero las palabras del lider de proyecto Andy Rubin en la Google I/O conference dan algo de que hablar:

“Sería un gran beneficio para la comunidad Android de proporcionar un lugar donde la gente puede ir a la segura y sin peligro para descargar contenido y que un sistema de cobro se encargue de remunerar a los desarrolladores por sus esfuerzos … Nosotros no hemos hecho nuestro trabajo si no ofrecemos ayuda a los desarrolladores a la distribución de su trabajo.”
Por lo que en Gizmodo comentan que una Adroid App Store sería lo que llenaría esas palabras.
Sería bueno comparar el desarrollo de terceros para android con los del iPhone.
Wed, May 28th, 2008
posted by alfredojv 06:05 PM

Esta es una de las muchas noticias que se han generado durante Google I/O, que se trata de la mayor concentración de desarrolladores web del planeta, donde estarán en una jornada intensiva de dos días cubriendo 90 sesiones que giran en torno a 5 ejes:

  1. AJAX y JavaScript
  2. APIs y Herramientas
  3. Redes Sociales
  4. Mapas y Geolocalización
  5. Móviles

Ahora puedes incrustar Google Earth con una nueva API que liberaron el día de hoy, por lo que desde ya será posible agregar un mapa a tu página web en la que podrás crear lineas, polígonos, fotos, etc.. todo como si fuera la aplicación de escritorio.

Pero bastata de tanto rollo, que mejor que verlo en vivo, tras el salto…te pedirá que instales un plugin, reiniciar el navegador y listo.
Read the rest of this entry »

Tue, May 27th, 2008
posted by alfredojv 11:05 AM

Es un modelo de arquitectura de software, algo similar al modelo-vista-controlador (MVC). PAC se utiliza como una estructura jerárquica de los agentes, cada uno de ellos consistente en una tríada de presentación, la abstracción y el control de partes. Los agentes (o tríadas) se comunican entre sí sólo a través del control de parte de cada tríada. También difiere de MVC en que dentro de cada tríada, se aísla por completo la presentación (vista en MVC) y la abstracción (modelo en MVC), Este ofrece separar el modelo y la vista, lo cuál, da al usuario una experiencia de usuario por los cortos periodos, de cómo la interfaz (presentación) puede ser mostrada antes que la abstracción este completamente inicializada.

El control es algo similar al Controlador en la arquitectura MVC. Este procesa eventos externos y actualiza el modelo. También se actualiza directamente la parte de presentación. Sin embargo, es diferente del controlador en MVC en la medida en que éste pasa los cambios que se están realizando a su componente padre.

La Abstracción contiene los datos, al igual que en MVC. Sin embargo, puede ser sólo una parte de la estructura de datos completa de la aplicación, y no desempeñar un papel activo en la notificación de cambios.

La presentación es exactamente igual que la vista en el MVC. Muestra la información desde la abstracción.

Como funciona

El control padre crea los elementos de su hijo PAC, ya sea en el arranque del programa, o dinámicamente en tiempo de ejecución.
Cuando el control de un PAC recibe un evento de usuario (1), este debe actualizar su presentación (2a) y/o su abstracción (2b). A continuación, se envía un evento de cambio a su padre (3). El padre actualiza sus hijos (pero no al nodo donde surgió el cambio) (5), por lo que todos actualizan su Presentación (6a) y/o abstracción (6b). Después que los nodos han sido actualizados, el padre se actualiza (7). Esto termina cuando todos los elementos PAC necesarios han sido actualizados.

Los hijos y padres pueden enviar eventos muy concretos para actualizar a sus vecinos. De esta forma, los elementos PAC podrán decidir la extensión del efecto del cambio. Pequeños cambios no tienen por qué ser propagados a través de toda la jerarquía.

Problemas

Las actuales herramientas de programación visual tienen algo relacionado con esta arquitectura, pero tienen todo tipo de peculiaridades y excepciones. Así que se puede tratar de reconocer la arquitectura en herramientas visuales, pero no son tan exactos. Además, la mayoría de herramientas dicen basarse en la arquitectura MVC, lo que tampoco es completamente cierto.

Técnicas de implementación

El Control es modelado por el patrón de diseño Mediator.
La presentación es modelada por el patrón de diseño Strategy.

Wed, May 7th, 2008
posted by alfredojv 01:05 PM

¿De que se compone el desarrollo de software? Hay un numero de fases comunes a cada desarrollo, sin importar la metodología, empezando por la captura de requisitos y terminando por el mantenimiento. Con los nuevos paradigmas, en la otra mano, puedes realizar cada una de las fases mas de una vez en cualquier momento.

  • Requisitos
  • Análisis
  • Diseño
  • Especificación
  • Implementación
  • Pruebas
  • Despliegue
  • Mantenimiento

Preguntas claves

Requisitos
¿Cual es nuestro contexto?
¿Qué tratamos de adquirir?

Análisis
¿Con que entidades estamos tratando?
¿Cómo podemos estar seguros que hacemos lo correcto?

Diseño

¿Cómo vamos a resolver el problema?
¿Qué hardware y/o software se necesitará para el sistema final?

Diseño del subsistema

¿Cómo vamos a implementar la solución?

Especificación

¿Qué reglas gobiernan entre las interfaces y los componentes del sistema?
¿Podemos eliminar ambigüedades y asegurar lo correcto?

Implementación

¿Cómo programaremos las los componentes para completar los requisitos?
¿Cómo escribimos código estilizado?

Pruebas

¿Satisface los requisitos?
¿Podemos quebrar el sistema?

Despliegue

¿Qué tienen que hacer los administradores del sistema?
¿Cómo podemos educar a los usuarios finales?

Mantenimiento

¿Podemos encontrar y resolver errores?
¿Podemos mejorar el sistema?

 

You are currently browsing the archives for the Programación category.

 

November 2008
M T W T F S S
« Oct    
 12
3456789
10111213141516
17181920212223
24252627282930
Ayuda a mantener este espacio