3.Patrón de creación Builder
- Hola a todos.Seguimos con nuestro curso dedicado a los patrones de diseño software.Los patrones de diseño son unas técnicas para resolver problemas comunes en el desarrollo de software y otros ámbitos referentes al diseño de interacción o interfaces.
- En esta ocasión veremos el patrón de diseño Builder, que separa la creación de un objeto complejo de su representación, de modo que el mismo proceso de construcción pueda crear representaciones diferentes. Básicamente significa que en lugar de implementar la creación de un objeto en el constructor de la clase, habrá otras clases encargadas de crear el objeto y asignarles las propiedades iniciales. Cada una de estas "otras" clases será un builder. Y cada uno de estos builders será capaz de crear un objeto nuevo con ciertas características.
- En nuestro caso la jerarquía de clase que hemos creado tiene el aspecto que veis en la imagen:
- En el siguiente vídeo vemos con un ejemplo como construir esta estructura de clases basándonos en el patrón de diseño Builder.
- Os dejo el código de las diferentes clases vistas en el vídeo:
*Clase ConexionBuilder:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Builder
{
// Builder
public abstract class ConexionBuilder
{
protected CadenaConexion conexion;
public CadenaConexion dameCadenaConexion() { return conexion; }
public virtual void asignarServidor()
{
}
public virtual void asignarBasedatos()
{
}
public virtual void asignarUsuario()
{
}
public virtual void asignarPasswor()
{
}
}
}
*Clase MySQLBuilder:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Builder
{
public class MySQLBuilder : ConexionBuilder
{
public MySQLBuilder()
{
conexion = new CadenaConexion();
}
public override void asignarServidor()
{
conexion.Servidor = "Servidor MySQl";
}
public override void asignarBasedatos()
{
conexion.NombreBaseDAtos = "Nombre instancia MySQl";
}
public override void asignarUsuario()
{
conexion.Usuario = "usuario MySQl";
}
public override void asignarPasswor()
{
conexion.Password = "pass usuario MySQl";
}
}
}
*Clase OracleBuilder :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Builder
{
public class OracleBuilder : ConexionBuilder
{
public OracleBuilder()
{
conexion = new CadenaConexion();
}
public override void asignarServidor()
{
conexion.Servidor = "Servidor ORACLE";
}
public override void asignarBasedatos()
{
conexion.NombreBaseDAtos = "Nombre instancia ORACLE";
}
public override void asignarUsuario()
{
conexion.Usuario = "usuario ORACLE";
}
public override void asignarPasswor()
{
conexion.Password = "pass usuario ORACLE";
}
}
}
*Clase OracleBuilder :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Builder
{
public class SqlServerBuilder : ConexionBuilder
{
public SqlServerBuilder()
{
conexion = new CadenaConexion();
}
public override void asignarServidor()
{
conexion.Servidor = "Servidor SQL SERVER";
}
public override void asignarBasedatos()
{
conexion.NombreBaseDAtos = "Nombre instancia SQL SERVER";
}
public override void asignarUsuario()
{
conexion.Usuario = "usuario SQL SERVER";
}
public override void asignarPasswor()
{
conexion.Password = "pass usuario SQL SERVER";
}
}
}
*Clase CadenaConexion:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Builder
{
public class CadenaConexion
{
public string Servidor { get; set; }
public string NombreBaseDAtos { get; set; }
public string Usuario { get; set; }
public string Password { get; set; }
public CadenaConexion()
{
}
public CadenaConexion(string servidor, string baseDatos, string usuario, string pass) : this()
{
Servidor = servidor;
NombreBaseDAtos = baseDatos;
Usuario = usuario;
Password = pass;
}
}
}
*Clase Conexion:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Builder
{
public class Conexion
{
private ConexionBuilder conexionBuilder;
public void nuevaConexion(ConexionBuilder conBuilder)
{
conexionBuilder = conBuilder;
}
public void crearCadenaConexion()
{
conexionBuilder.asignarServidor();
conexionBuilder.asignarBasedatos();
conexionBuilder.asignarPasswor();
conexionBuilder.asignarUsuario();
}
public CadenaConexion ConexionLista
{
get { return conexionBuilder.dameCadenaConexion(); }
}
}
}
*Clase Program:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Builder
{
class Program
{
static void Main(string[] args)
{
var conexion = new Conexion();
// queremos crear cadena conexion a SQL SERVER
conexion.nuevaConexion(new SqlServerBuilder());
conexion.crearCadenaConexion();
var conexionSQLServer = conexion.ConexionLista;
// queremos crear cadena conexion a My SQL
conexion.nuevaConexion(new MySQLBuilder());
conexion.crearCadenaConexion();
var conexionMySQl = conexion.ConexionLista;
// queremos crear cadena conexion a oracle
conexion.nuevaConexion(new OracleBuilder());
conexion.crearCadenaConexion();
var conexionOracle = conexion.ConexionLista;
}
}
}
No hay comentarios:
Publicar un comentario