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.

Creando una capa de abstraccion de base de datos

  • 5 Respuestas
  • 2365 Vistas

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

Desconectado ~ Yoya ~

  • *
  • Underc0der
  • Mensajes: 152
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • Email
« en: Enero 30, 2013, 01:16:52 am »
Bueno este tema era para dar respuesta a uno, pero pienso que es mejor crear un POST.

Este tema es simple de entender, y en este tema se aplica el concepto de abstraccion y aquí se puede ver la utilidad.

Bueno normalmente cuando se crea un sistema utilizando POO, siempre se piensa en crear una clase padre, esta clase padre es recomendable que sea abstracta, ya que la finalidad de esta clase es ser heredara y  implementar todos sus métodos abstractos.


Ahora aplicando ese concepto al ámbito de base de datos. Se tiene lo siguiente: En toda base de datos es necesario realizar una conexión, también se realiza sentencias SQL, se devuelve un resultado y se cierra la conexión. Eso es lo que tienen en común, MYSQL, PostgreSQL, etc... Todo lo que tienen en comun, en la clase padre, se debe declarar como metodos abstractos. Metodos porque realizan una accion y deben ser abstracto porque el procedimiento para la implementación es diferente, osea no utilizas la misma función para conectarte a un servidor MYSQl que para uno PostgreSQL.

Bueno, aqui el codigo, no lo he probado ni nada, es un Poc para que tengan una idea.

Código: PHP
  1. abstract class BaseDeDatos {
  2.  
  3. abstract public function conectar($user, $pass, $db, $host);
  4. abstract public function sql($sql);
  5. abstract public function resultado();
  6. abstract public function cerrarConexion();
  7. }
  8.  

MYSQL
Código: PHP
  1. class No tienes permisos para ver links. Registrate o Entra con tu cuenta extends BaseDeDatos {
  2.  
  3. public function  conectar($user, $pass, $db, $host) {
  4.  
  5. //Me conecto al servidor con el usuario y pass, y selecciono la base de datos, luego devuelvo el objeto para luego realizar consultas
  6. //Codigo
  7. //Codigo
  8. //Codigo
  9. }
  10.  
  11. public function sql($sql) {
  12. //Codigo que realiza la consulta SQL, y guarda el resultado en una variable para su posterior uso
  13. //Codigo
  14. //Codigo
  15. //Codigo
  16. //Codigo
  17. }
  18.  
  19. public function resultado() {
  20. //Retorno el resultado de la consulta SQL
  21. //Codigo
  22. //Codigo
  23. //Codigo
  24. }
  25.  
  26. public function cerrarConexion(){
  27. //Cierro la conexion que cree
  28. //Code
  29. //Code
  30. //Code
  31. }
  32. }
  33.  

PostgreSQL
Código: PHP
  1. class PostgreSQL extends BaseDeDatos {
  2.  
  3. public function  conectar($user, $pass, $db, $host) {
  4.  
  5. //Me conecto al servidor con el usuario y pass, y selecciono la base de datos, luego devuelvo el objeto para luego realizar consultas
  6. //Codigo
  7. //Codigo
  8. //Codigo
  9. }
  10.  
  11. public function sql($sql) {
  12. //Codigo que realiza la consulta SQL, y guarda el resultado en una variable para su posterior uso
  13. //Codigo
  14. //Codigo
  15. //Codigo
  16. //Codigo
  17. }
  18.  
  19. public function resultado() {
  20. //Retorno el resultado de la consulta SQL
  21. //Codigo
  22. //Codigo
  23. //Codigo
  24. }
  25.  
  26. public function cerrarConexion(){
  27. //Cierro la conexion que cree
  28. //Code
  29. //Code
  30. //Code
  31. }
  32. }
  33.  

Espero que con eso se haya entendiendo el concepto. Y eso ya da cabida a poder implementar otros sistema de gestión de base de datos. Con eso se consigue tener algo mas generico, osea no importa con que base de datos estes trabajando, vas a utilizar todo de la misma manera.

Hay se aplica 5 muy importante puntos.

1 - Se crea un sistema escalable, osea que se puede implementar en un futuro otros sistema de base de datos, sin necesidad de agregar codigo ni modificar codigo de alguna clase ya existente.

2 - Se aplica el principio open-closed. Las clases deben estar abierta a extensiones, pero cerrada a modificaciones. Como lo ven, apartir de la clase BaseDeDatos, se crea una extencion para MySQL, PostgreSQL pero no hay necesidad de modificar la clase BaseDeDatos.

3 - Se aplica correctamente la herencia. No tienes permisos para ver links. Registrate o Entra con tu cuenta. Osea MySQL es una Base de datos, PostgreSQL es una base de datos. -- Mysql is a BaseDeDatos, PostgreSQL is a BaseDeDatos.

4 - Se aplica correctamente la abstraccion.

5 - Da cabida al polimorfismo

Saludos.
« Última modificación: Enero 30, 2013, 11:47:37 am por ~ Yoya ~ »
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.

Desconectado alexander1712

  • *
  • Underc0der
  • Mensajes: 850
  • Actividad:
    0%
  • Reputación -2
    • Ver Perfil
    • El blog del programador
    • Email
« Respuesta #1 en: Enero 30, 2013, 02:03:29 am »
ves? esto era de lo que hablaba, si haces post explicando cosas como esta, no hablarás de cosas que probablemente pocos usuarios entiendan, porque podrán leerlo y aprender directamente desde underc0de, además de que le haces un bien al foro xDD

se agradece el aporte.

un saludo!

Desconectado ~ Yoya ~

  • *
  • Underc0der
  • Mensajes: 152
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • Email
« Respuesta #2 en: Enero 30, 2013, 11:50:44 am »
jejeje no pasa nada :P

Saludos.
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.

Desconectado empardopo

  • *
  • Underc0der
  • Mensajes: 9
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #3 en: Julio 17, 2013, 02:27:29 pm »
Muy bueno el aporte, thanks!
Sólo he echado en falta que no estuviera el código al completo! Es lo que tiene ser un perfecto newbie!!

Saludos

Desconectado Destructor.cs

  • *
  • Underc0der
  • Mensajes: 68
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #4 en: Julio 17, 2013, 03:16:15 pm »
Ahora que veo el tema y que lo comentan...
En vez de usar una clase completamente abstracta, si no me equivoco también se podria usar una interfaz!
Saludos

Desconectado ~ Yoya ~

  • *
  • Underc0der
  • Mensajes: 152
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • Email
« Respuesta #5 en: Julio 18, 2013, 12:01:27 am »
Eso es correcto
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.

 

¿Te gustó el post? COMPARTILO!



10 Mejores Librerías Para Seguridad En PHP - Seguridad De Datos Desde PHP

Iniciado por graphixx

Respuestas: 0
Vistas: 1949
Último mensaje Enero 23, 2016, 06:03:10 am
por graphixx
Metiendo datos en un servidor remoto [ por VenoM ]

Iniciado por ANTRAX

Respuestas: 0
Vistas: 1064
Último mensaje Febrero 24, 2010, 11:28:54 am
por ANTRAX
Insertando datos a una DB

Iniciado por syskc0

Respuestas: 0
Vistas: 1017
Último mensaje Julio 14, 2010, 11:08:45 am
por syskc0
Base Converter 0.1 By DarkSystem

Iniciado por ANTRAX

Respuestas: 0
Vistas: 1267
Último mensaje Febrero 24, 2010, 11:26:33 am
por ANTRAX
Creando herramientas interesantes con funciones de red en php

Iniciado por Oggy

Respuestas: 0
Vistas: 1518
Último mensaje Diciembre 17, 2012, 09:02:00 pm
por Oggy