domingo, 13 de octubre de 2013

VENTAS 2 - Crear las Clases en C#

VENTAS 2. Creación de Clases en C#

Una vez definida la base de datos, ahora procedemos a crear las clases, para evitar que tu aplicación sufra retrasos y estar tratando de averiguar como empezaras la programación, deberás tener presente las siguientes recomendaciones:

  • Primero, debes crear por cada tabla de SqlServer una clase que coincida con los campos y nombre de la tabla.
  • Segundo, debes agregar las clases adicionales que usaras y tienen una relación directa con estas tablas, por ejemplo las herencias, las interfaz y otras.


1. Agregando Clases Padre o Principales

Una clase que uso constantemente es una que me simplifica las operaciones de acceso y ejecución de ordenes de SqlServer desde C#, a esta la llamo la clase CDatos.

El código de CDatos ha sido mejorado respecto al anterior ya que ahora este no provocará caída de la aplicación, sino nos enviara un mensaje en caso de EjecutarComando y un valor nulo en caso de EjecutarConsulta, este tiene el siguiente código:

 Código Fuente de la Clase CDatos

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;

namespace AppVenta
{
    public class CDatos
    {
        string cadenaDeConexion = @"Data Source=(local);Initial Catalog=bdVentas;Integrated Security=True";

        public string Mensaje;

        public bool EjecutarComando(string textoSql)
        {
            try
            {
                //Para la cadena de conexión
                string sCnn = cadenaDeConexion;
                //Creamos la conexión
                SqlConnection cnn = new SqlConnection(sCnn);
                //Texto del comando insert
                string iTexto = textoSql;
                //Creamos el comando con su texto y conexión
                SqlCommand cmd = new SqlCommand(iTexto, cnn);
                cmd.CommandType = CommandType.Text;
                //abrimos la conexión y ejecutamos el comando
                cnn.Open();
                //Ejecutamos el comando sql
                cmd.ExecuteNonQuery();
                //Cerramos la conexión
                cnn.Close();
                //Agregamos el Mensaje de Correcto
                Mensaje = "Comando realizado con exito...";
                return true;
            }
            catch
            {
                Mensaje = "0: Error en Conexión con la base de datos o el comando de SqlServer";
                return false;
            }
        }

        public DataTable EjecutarConsulta(string textoSQL)
        {
            try
            {
                //Creamos la cadena de conexion
                string sCnn = cadenaDeConexion;
                //Creamo el comando de sql para listar
                string sSel = textoSQL;
                //Creamos el adaptador que capturara los datos
                SqlDataAdapter da = new SqlDataAdapter(sSel, sCnn);
                //Creamos un data table que contendra los datos
                DataTable dt = new DataTable();
                //Llenamos el data table con el adaptador
                da.Fill(dt);
                //Colocando Mensaje
                Mensaje = "Comando realizado con éxito...";
                return dt;
            }
            catch
            {
                Mensaje = "0: Error en Conexión o Consulta de SqlServer...";
                return null;
            }
        }
    }
}

Interfaz

Una interfaz es una forma de acceder a una clase, cuando uno desea acceder a los datos u operaciones de una clase, puede hacer lo mediante la interfaz, la ventaja de una interfaz es que varios objeto pueden usar una interfaz y así puede generalizarse la solución de un problema para varias clases y programarlas en conjunto.

También crearemos una interfaz que nos permitirá generalizar el código y hacer las operaciones de insertar, modificar y eliminar de forma similar para evitar desorden a la hora de codificar estos métodos, las interfaz también permiten la re utilización del código, esta interfaz es la siguiente:

 Código Fuente de la Interfaz IMantenimiento

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace AppVenta
{
    public interface IMantenimiento
    {
        bool Insertar();

        bool Modificar();

        bool Eliminar();
    }
}

2. Creación de Clases

Ahora necesitamos crear las clases que corresponden a las tablas de la base de datos, primero hemos desarrollado las clases anteriores ya que estas clases dependen de la clase CDatos y de la interfaz CMantenimiento.

 Código de la clase CProducto

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace LogicaVenta
{
    public class CProducto : CDatos, IMantenimiento
    {
        private int idProducto;

        public int IdProducto
        {
            get { return idProducto; }
            set { idProducto = value; }
        }
        private string nombre;

        public string Nombre
        {
            get { return nombre; }
            set { nombre = value; }
        }
        private string descripcion;

        public string Descripcion
        {
            get { return descripcion; }
            set { descripcion = value; }
        }
        private double precioUnitario;

        public double PrecioUnitario
        {
            get { return precioUnitario; }
            set { precioUnitario = value; }
        }
        private string observacion;

        public string Observacion
        {
            get { return observacion; }
            set { observacion = value; }
        }

        public bool Insertar()
        {
            throw new NotImplementedException();
        }

        public bool Modificar()
        {
            throw new NotImplementedException();
        }

        public bool Eliminar()
        {
            throw new NotImplementedException();
        }
    }
}


 Código de la clase CCLiente

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace LogicaVenta
{
    class CCliente : CDatos, IMantenimiento
    {
        int idCliente;

        public int IdCliente
        {
            get { return idCliente; }
            set { idCliente = value; }
        }
        string nombre;

        public string Nombre
        {
            get { return nombre; }
            set { nombre = value; }
        }
        string direccion;

        public string Direccion
        {
            get { return direccion; }
            set { direccion = value; }
        }
        string telefono;

        public string Telefono
        {
            get { return telefono; }
            set { telefono = value; }
        }
        string observacion;

        public string Observacion
        {
            get { return observacion; }
            set { observacion = value; }
        }
        public bool Insertar()
        {
            throw new NotImplementedException();
        }

        public bool Modificar()
        {
            throw new NotImplementedException();
        }

        public bool Eliminar()
        {
            throw new NotImplementedException();
        }
    }
}

 Código de la clase CDetalle

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace LogicaVenta
{
    class CDetalle : CDatos, IMantenimiento
    {
        int fkVenta;

        public int FkVenta
        {
            get { return fkVenta; }
            set { fkVenta = value; }
        }
        int fkProducto;

        public int FkProducto
        {
            get { return fkProducto; }
            set { fkProducto = value; }
        }
        int cantidad;

        public int Cantidad
        {
            get { return cantidad; }
            set { cantidad = value; }
        }
        double precioUnitario;

        public double PrecioUnitario
        {
            get { return precioUnitario; }
            set { precioUnitario = value; }
        }

        public bool Insertar()
        {
            throw new NotImplementedException();
        }

        public bool Modificar()
        {
            throw new NotImplementedException();
        }

        public bool Eliminar()
        {
            throw new NotImplementedException();
        }
    }
}


 Código de la clase CVenta

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace LogicaVenta
{
    class CVenta : CDatos, IMantenimiento
    {
        int idVenta;

        public int IdVenta
        {
            get { return idVenta; }
            set { idVenta = value; }
        }
        DateTime fecha;

        public DateTime Fecha
        {
            get { return fecha; }
            set { fecha = value; }
        }
        string observacion;

        public string Observacion
        {
            get { return observacion; }
            set { observacion = value; }
        }
        int fkCliente;

        public int FkCliente
        {
            get { return fkCliente; }
            set { fkCliente = value; }
        }

        public bool Insertar()
        {
            throw new NotImplementedException();
        }

        public bool Modificar()
        {
            throw new NotImplementedException();
        }

        public bool Eliminar()
        {
            throw new NotImplementedException();
        }
    }
}

Diagrama de Clases

El diagrama nos nuestra la clase CDatos como una clase Principal de la cual hereda su comportamiento a todas las demás tablas, también tenemos la interfaz IMantenimiento mediante la cual nos permitirá acceder a las clases de forma única, reduciendo así el código.