miércoles, 29 de octubre de 2014

Nota: para desarrolladores principiantes avanzados --- este blog esta en fase de creación --- y es para proposito del curso 

UTArlingtonX: LINK5.10x Data, Analytics, and Learning


Como en un CookBook, tener y disponer de una clase para:

  • Capa de Datos 
    • Capa de Entidades
  • Capa de Reglas de Negocio 
  • Capa de Presentacion 
    • Servicios, como web services Primero en la capa de Datos
Para capa de datos el siguiente codigo es util
 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

namespace CapaDatos
{
    internal class Conexion
    {
        private static string cadenaConexion = ConfigurationManager.ConnectionStrings["conexionSQL"].ConnectionString;;// definir 
        private static SqlConnection conex = new SqlConnection(cadenaConexion);

        private static bool conectar()
        {
            try
            {
                conex.Open();
                return true;
            }
            catch (Exception)
            {
                
                return false;
            }
        }

        private static void desconectar()
        {
            conex.Close();
        }

        public static void EjecutarOperacion(string sentencia, List listaParametro, CommandType tipoComando)
        {
            if (conectar())
             {
              SqlCommand comando = new SqlCommand();
                    comando.CommandText= sentencia;
                    comando.CommandType = tipoComando;

                    comando.Connection = conex;

                    foreach (SqlParameter parametro in listaParametro)
                   {
                   comando.Parameters.Add(parametro);
                    }
                     comando.ExecuteNonQuery();
                     desconectar(); 
             }
            else 
            {
                throw new Exception("hubo problema al conectarse a la base de datos");
            }
        }

        public static DataTable EjecutarConsulta(string sentencia, List listaParametro, CommandType tipoComando)
        {
            SqlDataAdapter adapter = new SqlDataAdapter();
            adapter.SelectCommand = new SqlCommand(sentencia, conex);
            adapter.SelectCommand.CommandType = tipoComando;

                    

            foreach (SqlParameter parametro in listaParametro)
             {
              adapter.SelectCommand.Parameters.Add(parametro);
             }
                   
            DataSet conjuntoDatos = new DataSet();
            adapter.Fill(conjuntoDatos);
            return conjuntoDatos.Tables[0];
        }
    }
}

}
****
Adicionamente debemos de tener una clase Manejador de base de datos y Proyecto donde se definirán las Entidades que se definieron en nuestro proyecto:


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

namespace Ejercicio.AccesoDatos
{
    public class ManejadorDatos
    {
        public static bool IniciarSesion(Entidades.Usuario objetoUsuario)
        {
            if (Conexion.EjecutarConsulta(string.Format("Select * from usuarios where usuario='{0}' and clave ={1}", objetoUsuario.Nombre, objetoUsuario.Clave ),
                new List(),
                System.Data.CommandType.Text).Rows.Count > 0)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public static void RegistrarUsuario(Ejercicio.Entidades.Usuario objetoUsuario)
        {
            List lista = new List();
            SqlParameter nombre = new SqlParameter("@p_nombre", objetoUsuario.Nombre);
            SqlParameter clave = new SqlParameter("@p_clave", objetoUsuario.Clave);
            lista.Add(nombre);
            lista.Add(clave);

            Conexion.EjecutarOperacion("Registrarusuario", lista, System.Data.CommandType.StoredProcedure);
        }
    }
}

Otro proyecto seria la de entidades aca solo expondre una sola entidad donde es una tabla usuario que se llamaran los campos Usuario y clave
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Ejercicio.Entidades
{
    public class Usuario
    {
        private string nombre = string.Empty;
        private string clave = string.Empty;

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

        public string Clave
        {
            get { return clave; }
            set { clave = value; }
        }
    }
}
CAPA DE REGLAS DE NEGOCIO
Se crea un proyecto con reglas de negocio y referenciar los componente de acceso a datos y demas
 
using Ejercicio.AccesoDatos;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Ejercicio.LogicaNegocio
{
    public class AdministradorUsuarios
    {
        private static int i=0;
        public static bool IniciarSesion(Entidades.Usuario objetoUsuario)
        {
            if (int.TryParse(objetoUsuario.Clave, out i))
            {
                return ManejadorDatos.IniciarSesion(objetoUsuario);
            }
            else
            {
                throw new Exception("formato de clave invalida");
            }
        }

        public static void RegistrarUsuario(Ejercicio.Entidades.Usuario objetoUsuario)
        {
            ManejadorDatos.RegistrarUsuario(objetoUsuario);
        }
    }
}
CAPA DE PRESENTACION
Para un Aplicación Distribuida esta capa se debe realizar un servicio Web o un servicio WCF al que espondremos aca:

 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using Ejercicio.Entidades;
using Ejercicio.LogicaNegocio;
/// 
/// Summary description for Operaciones
/// 
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
// [System.Web.Script.Services.ScriptService]
public class Operaciones : System.Web.Services.WebService {

    public Operaciones () {

        //Uncomment the following line if using designed components 
        //InitializeComponent(); 
    }

    [WebMethod]
    public bool IniciarSesion(Usuario objetoUsuario)
    {
        return AdministradorUsuarios.IniciarSesion(objetoUsuario);
    }

[WebMethod]
    public void RegistrarUsuario(Ejercicio.Entidades.Usuario objetoUsuario)
    {
        AdministradorUsuarios.RegistrarUsuario(objetoUsuario);
    }
}

No hay comentarios.:

Publicar un comentario