Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Capa de datos<br />
Capa de datos<br />Los  APIs de acceso a datos proporciona una capa de abstracción sobre la conexión para los DBMS, normal...
Capa de datos<br />Para cargar una estructura de datos(DataSet), es necesario un objeto que adapte los datos desde la fuen...
Capa de datos<br />usingSystem.Data;<br />//Driver para postgresql<br />usingNpgsql;<br />stringsentenciaSQL = "SELECT * F...
PATRONES DE SOFTWARE<br />“Cada patrón describe un problema que ocurre una y otra vez en nuestro entorno, para describir d...
Si alguien ya lo resolvió, Cómo comunicar experiencias? Cómo comunicar diseños?
Todos tenemos ideas diferentes de un mismo concepto.
Emplear un lenguaje que sea comprensible por los desarrolladores, diseñadores, arquitectos.
Los patrones de software permiten establecer un lenguaje común para expresar y Motivación comunicar experiencias, diseños ...
PATRONES DE SOFTWARE<br />Ventajasfundamentales:<br /><ul><li>Están ya probados: son soluciones que han sido utilizadas co...
Patrón DAO Data Access Object<br />Objeto de acceso a datos(DAO)<br />DAO es un método muy simple de mapear objetos a base...
DAO Data Access Object<br />El patron DAO se utiliza para:<br />Abstrae y encapsular los accesos a los datos.<br />Gestion...
Estructura del DAO Data Access Object<br />BusinessObject: Es el objeto que quiere acceder a la fuente de datos para poder...
Ejemplo DAO <br />Se tiene la siguiente tabla en un motor relacional.<br />CREATE TABLE ciudades (<br />nombre varchar (80...
DAO Data Access Object<br />Sin embargo como las aplicaciones del mundo real no están compuestas por<br />el acceso a una ...
DAO Data Access Object<br />RELACION CON OTROS PATRONES<br />El DAO se relacionan comúnmente con los siguientes patrones:<...
Ventajasdel DAO<br /><ul><li>Cualquier objeto no requiere conocimiento directo del destino final de la información que se ...
Se baja el nivel de acoplamiento entre clases, reduciendo la complejidad de realizar cambios.
Upcoming SlideShare
Loading in …5
×

Patrones de arquitectura Software(Capa de Datos)

20,836 views

Published on

Published in: Education, Technology

Patrones de arquitectura Software(Capa de Datos)

  1. 1. Capa de datos<br />
  2. 2. Capa de datos<br />Los APIs de acceso a datos proporciona una capa de abstracción sobre la conexión para los DBMS, normalizando las llamadas de acceso a las base de datos. <br />ADO, ODBC , OLE DB o JDBC, entre varios mas, son APIs(ApplicationProgramming Interface) de bajo nivel para acceder a diferentes fuentes de datos. Esto quiere decir que es un conjunto de objetos y funciones para que los programadores puedan integrar servicios de DBMS dentro de sus aplicaciones.<br />Estos APIs consisten principalmente en un objeto de origen de datos, un objeto de sesión, un objeto de comando y un objeto de conjunto de filas. <br />La secuencia en programación es la siguientes.      Inicializar o carga el controlador(driver) del API escogido.     Establece la conexión con la fuente de datos.     Prepara y envía la sentencia del comando SQL.<br /> Ejecuta la consulta, inserción o actulización.     Procesar los resultados.     Cierra la conexión.<br />El diseño de estos APIs debe tener lo siguiente.<br />1. Los APIs deben proveer esa estructura de objetos y un mapeo suave al paradigma de "tipos de datos" que ofrecen los DBMS. 2. El programador se debe sentir en contacto directo con el DBMS, no con un socket o un proceso de maquina. 3. La comunicacion al DBMS debe ser facil de programar. 4. Debia ser flexible para aceptar configuraciones diferentes de conectividad. Por consiguiente, la misma aplicación del desarrollador pueda acceder a varios DBMS a la vez.<br />
  3. 3. Capa de datos<br />Para cargar una estructura de datos(DataSet), es necesario un objeto que adapte los datos desde la fuente hasta la aplicación. Éste objeto será un DbDataAdapter.<br />El DbDataAdapter, sin embargo, necesita saber qué ejecutar. Para ello hará uso de una orden de base de datos o DbCommand.<br />El DbCommand necesita también cierta información: una sentencia SQL o nombre de procedimiento almacenado para pasarle a la fuente de datos… y una conexión por la cual establecer el intercambio de datos. Esta conexión será un objeto de tipo DbConnection.<br />Por último, el DbConnection únicamente hará uso de una cadena de conexión para establecer el enlace entre aplicación y fuente de datos.<br />
  4. 4. Capa de datos<br />usingSystem.Data;<br />//Driver para postgresql<br />usingNpgsql;<br />stringsentenciaSQL = "SELECT * FROM v_personas WHERE numeroDocumento = :doc ";<br />Datasetds;<br />try<br /> {<br /> // Creamos una conexión a partir de la ConnectionString<br />NpgsqlConnectionconexion = new NpgsqlConnection("Server=127.0.0.1;Port=5432;User<br />Id=postgres;Password=elPassdePsgreSQL;Database=practica2;");<br />//Abrimos conexión <br />conexion.Open();<br /> // Instanciamos un SqlCommand que ejecutará la sentencia que le pasemos como parámetro con la conexión.<br />NpgsqlCommand personas = new NpgsqlCommand(sentenciaSQL, conexion);<br /> //Configuramos el SqlCommand,indicando que ejecutará una sentencia e inyectándole los parámetros<br />personas.Parameters.Add(new NpgsqlParameter("doc", NpgsqlDbType.Text));<br /> // Finalmente, instanciamos un DataAdaptery efectuamos la consulta<br />NpgsqlDataAdapter da = new NpgsqlDataAdapter(personas);<br />da.Fill(ds);<br /> }<br /> catch (Exception ex)<br /> {<br />throw (ex);<br />}<br />finally {conexion.Close(); }<br />
  5. 5. PATRONES DE SOFTWARE<br />“Cada patrón describe un problema que ocurre una y otra vez en nuestro entorno, para describir después el núcleo Definición de la solución a ese problema, de tal manera que esa<br />solución pueda ser usada más de un millón de veces sin hacerlo siquiera dos veces de la misma forma”.<br /><ul><li>Para que solucionar problemas que otros han resuelto?
  6. 6. Si alguien ya lo resolvió, Cómo comunicar experiencias? Cómo comunicar diseños?
  7. 7. Todos tenemos ideas diferentes de un mismo concepto.
  8. 8. Emplear un lenguaje que sea comprensible por los desarrolladores, diseñadores, arquitectos.
  9. 9. Los patrones de software permiten establecer un lenguaje común para expresar y Motivación comunicar experiencias, diseños y buenas prácticas.</li></ul>En el desarrollo de software de casi todas las aplicaciones es necesario solucionar una y otra vez los mismos<br />problemas: autentificación del cliente, persistencia de datos, separación entre presentación,<br />lógica y control,... En lugar de reinventar continuamente la rueda, es mucho más productivo<br />aplicar estrategias que ya hayan funcionado con anterioridad. Esta idea es la que lleva a la<br />definición de los patrones software.<br />
  10. 10. PATRONES DE SOFTWARE<br />Ventajasfundamentales:<br /><ul><li>Están ya probados: son soluciones que han sido utilizadas con anterioridad de manera</li></ul> repetida y se ha comprobado que funcionan.<br /><ul><li>Son reutilizables: corresponden con problemas que no son específicos de un caso</li></ul> concreto, sino que se presentan una y otra vez en distintas aplicaciones.<br /><ul><li>Son expresivos: cuando un equipo de desarrolladores tiene un vocabulario común de</li></ul> patrones, se puede comunicar de manera fluida y precisa las ideas fundamentales sobre<br /> el diseño de una aplicación.<br />La experiencia y el sentido común dictarán cuándo son apropiados y cómo utilizarlos.<br />
  11. 11. Patrón DAO Data Access Object<br />Objeto de acceso a datos(DAO)<br />DAO es un método muy simple de mapear objetos a bases de datos. Para generar un DAO un<br />desarrollador podría escribir una clase que contiene un atributo para cada campo en la tabla de<br />clientes, y una clase clienteDao que contiene los métodos para la inserción, actualización,<br />selección y eliminación de filas. La clase clienteDao normalmente contienen código con<br />sentencias SQL. <br />Similar al patrón Fowler’sTable Data Gateway utilizado a menudo con el<br />patrón DTO.<br />Es un componente de software que suministra una interfaz común entre la aplicación y uno o<br />más repositorios de datos.<br />Es una solución al problema del diferencial de impedancia (ImpedanceMismatch) entre una<br />aplicación orientado a objetos y una base de datos relacional.<br />Utiliza únicamente la interfaz de programación (API) nativa de el manejador de bases de datos, o<br />algún otro sustituto como el OBDC,DBI, JDBC, OLEDdb entre otros.<br />
  12. 12. DAO Data Access Object<br />El patron DAO se utiliza para:<br />Abstrae y encapsular los accesos a los datos.<br />Gestiona las conexiones a los repositorios.<br />Obtiene o actualiza los datos almacenados en los repositorios.<br />
  13. 13. Estructura del DAO Data Access Object<br />BusinessObject: Es el objeto que quiere acceder a la fuente de datos para poder<br />almacenar o consultar datos.<br />DataAccessObject: Abstrae al BusinessObject de los detalles del acceso a la fuente<br />de datos.<br />DataSource: Representa la implementación de la fuente de datos en sí.<br />Transfer Object: es un objeto intermedio entre el BusinessObject y el<br />DataAcessObject<br />
  14. 14. Ejemplo DAO <br />Se tiene la siguiente tabla en un motor relacional.<br />CREATE TABLE ciudades (<br />nombre varchar (80),<br />departamento varchar(80));<br />Se crean dos clases para cada relación con la que en nuestra aplicación tendrá acceso: <br />el acceso a datos y el transporte de datos<br />Clase de acceso a datos:<br />PublicclassCiudadesDAO {<br />Ciudad ciudad;<br />....<br />//establece la conexion a la base de datos<br />//implementa operaciones basicas como insert,update, delete<br />voidinsert() {....}<br />voiddelete() {....}<br />voidupdate() {....}<br />Ciudad find()<br />{ ....SELECT * FROM ciudades WHERE nombre.....}<br />}<br />Clase transporte de datos:<br />Publicclass Ciudad<br />{<br />//atributos = campos de la relación<br />string nombre;<br />string departamento;<br />//metodos<br />StringgetNombre()<br />{....}<br />StringgetDepartamento()<br />{....}<br />}<br />
  15. 15. DAO Data Access Object<br />Sin embargo como las aplicaciones del mundo real no están compuestas por<br />el acceso a una simple tabla, para enfrentar esta situación se utiliza el patrón<br /> Factory que permite implementar una fábrica de objetos DAO.<br />En General (aunque esto es una decisión de diseño), por cada objeto de<br />negocio en nuestro sistema, se de crear un DAO distinto.<br />La información que devuelve o se le pasa al DAO se en cápsula en objetos de<br /> tipo TRANSFER OBJECT(objeto de tranferencia), que, simplificando, dos o más<br />que "contenedores de información".<br />
  16. 16. DAO Data Access Object<br />RELACION CON OTROS PATRONES<br />El DAO se relacionan comúnmente con los siguientes patrones:<br />Transfer object(DTO): la información que se envía/recibe del DAO se "empaqueta« en estos objetos.<br />Factory: con el objeto de conseguir la independencia del almacén de datos,<br />comúnmente se usan este patrón para instancias los DAOs.<br />
  17. 17. Ventajasdel DAO<br /><ul><li>Cualquier objeto no requiere conocimiento directo del destino final de la información que se manipula.
  18. 18. Se baja el nivel de acoplamiento entre clases, reduciendo la complejidad de realizar cambios.
  19. 19. Se aísla las conexiones a la fuente de datos en una capa fácilmente identificable y mantenimiento.
  20. 20. Se oculta los detalles de implementación a la fuente de datos.
  21. 21. Simple - puede ser entendido por la mayoría de los desarrolladores .
  22. 22. Separación de los datos (DTO) y el comportamiento (DAO).
  23. 23. Diseñado para arquitecturas distribuidas (clases DTO se puede pasar entre las capas y clases DAO pueden ser expuestos como servicios WEB).
  24. 24. No requiere tiempo de ejecución de contenedores (código DAO puede ser una unidad de prueba en el cliente)
  25. 25. El código es muy eficiente, si el DAO está diseñado para aprovechar las capacidades de base de datos (procedimientos almacenados o funciones, JOINs, etc.) </li></li></ul><li>Desventajas DAO<br /><ul><li>Muchas veces es necesario acceder a datos que estan ubicados en diferentes Repositorio de datos. En mucho de ellos es necesario tener en la cuenta las diferentes particularidades.
  26. 26. El repositorio no tiene porqué proporcionar un API común. Las aplicaciones deben poder acceder de forma transparente a estos repositorio.
  27. 27. Requiere grandes volúmenes de código (se puede utilizar un generador de código DAO
  28. 28. Escribir código para navegar por el modelo de objetos requiere una cierta comprensión del esquema de base de datos</li></li></ul><li>Data transfer object (DTO)<br />Cuando se trabaja con arquitecturas de varias capas, un problema típico es cómo pasar los datos de<br />una capa a otra.<br />Conocidos anteriormente como ValueObjects<br />Definición http://en.wikipedia.org/wiki/Data_Transfer_Object<br />Este tipo de objetos suelen ser lightWeight y de una naturaleza muy simple. No tienen ningún tipo<br />de logica de negocio(businesslogic) y son simples contenedores de datos estructurales<br />(mapeo orientado a objetos).<br />DTO son un tipo de objetos que sirven únicamente para transportar datos<br />Un transfer object no es más que un objeto que "empaqueta" datos para que puedan viajar entre<br />las capas. Dicho objeto contendrá todos los datos que nos interesen accesibles mediante gettersy<br />setters.<br />DTO son el concepto principal en el Domain Driven Design (DDD) unametodologia de diseñode<br />software.<br />
  29. 29. Data transfer object (DTO)<br />
  30. 30. una interfaz es estructura de datos que muestra únicamente las firmas de los métodos de una clase. Por consiguiente, una clase que herede de la interfaz se obliga a implementar el como realizara la implementación de dichos métodos(acciones).<br />Esta interfaz únicamente dice QUÉ acciones se van a realizar, pero no CÓMO se realizarán.<br />Definición del patrón AbstractFactory:<br />http://es.wikipedia.org/wiki/Abstract_Factory_(patr%C3%B3n_de_dise%C3%B1o) <br />Generalmente un proyecto de software se desarrolla con una fuente de datos en particular (PostgreSQL,SQL Server, MySQL, Firebird, Oracle, Archivos XML,archivos de excel, archivos de texto,cvs…). Sin embargo, la fuente de datos podría cambiar en cualquier momento, por lo que se debería, en la medida de lo posible, abstraer el desarrollo de la aplicación de la fuente de datos. <br />AbstractFactory (Factoría Abstracta)<br />
  31. 31. AbstractFactory (Factoría Abstracta)<br />

×