none
Error al desacoplar capa de Presentacion y capa de Reglas

    Question

  • Hola quisiera saber si me pueden ayudar en lo sig.: tengo definida una aplicaion en 3 capas(Presentacion, ReglasNegocio, AccesoDatos).
    En la capa de ReglasNegocio tengo:

     public class BancosBLL
        {
            public void bancosCrear(Bancos bancos)
            {
                if (!BancosDAL.Existe(bancos.Nombre))
                {               
                    BancosDAL bdal = new BancosDAL(); //si no se define como estatica en DAL
                    bdal.bancosCrear(bancos);
                }
                else
                {
                    throw new Comun.Excepciones.BussinessExcepcion("Ya existe el Banco " + bancos.Nombre);
                }
            }

    Ahora para desacoplarla con un servicio WCF lo que hice fue agregar un proyecto llamado ServicioContratos:

    using System.ServiceModel;
    using Comun.Entidades;

    namespace ServicioAdmBancos
    {
        [ServiceContract]
        public interface IBancos
        {
            [OperationContract]
            void bancosCrear(Bancos bancos);

            [OperationContract]
            void bancosEliminar(Bancos bancos);

            [OperationContract]
            List<Bancos> GetBancosList();
        }

    tambien agregue el proyecto llamado ServicioImplementacion que implementa la interface anterior:

    namespace ServicioAdmBancos
    {
        public class Bancos: IBancos
        {
            #region Miembros de IBancos

            public void bancosCrear(Comun.Entidades.Bancos bancos)
            {
                //Deberia atrapar las excepciones que vienen de la capa de reglas y pasarlas al usuario ?
                Reglas.BancosBLL bbll = new Reglas.BancosBLL();
                bbll.bancosCrear(bancos);
            }

            public void bancosEliminar(Comun.Entidades.Bancos bancos)
            {
                Reglas.BancosBLL bbll = new Reglas.BancosBLL();
                bbll.bancosEliminar(bancos);
            }

            public List<Comun.Entidades.Bancos> GetBancosList()
            {
                Reglas.BancosBLL bbll = new Reglas.BancosBLL();
                return bbll.GetBancosList();
            }

    Entonces de la ReglasNegocio se pasa por esto 2 proyectos y de aqui se pasarian los datos a la capa de Presentacion

     private void button1_Click(object sender, EventArgs e)
            {
                if (validarCampos())
                {
                    try
                    {
                        IBancos ib = new BancosClient();

                        Bancos bancos = new Bancos();
                        bancos.nombre = textBox1.Text.ToUpper();
                        bancos.direccion = textBox2.Text;
                        bancos.telefono = textBox3.Text;

                        ib.bancosCrear(bancos);

                        toolStripStatusLabel1.ForeColor = Color.Black;
                        toolStripStatusLabel1.Text = "Datos guardados exitosamente!!!";
                    }
                    catch (Comun.Excepciones.BussinessExcepcion ex) //ver si es correcto agregar la referencia al proyecto Comun para las Excepciones.
                    {
                        MessageBox.Show(ex.Message);
                    }

     

    Yo tengo definida en una capa 'Comun' las Excepciones y los DTO(entidades).

    Cuando ejecuto la aplicacion me da un error en la capa de ReglasNegocio, o sea, se atrapa la excepcion correctamente (trato de ingresar un nombre repetido), pero no se pasa a la capa de Presentacion (no se como pasar la excepcion). VER IMAGEN

    Entonces mis preguntas:
    1-Deberia y si es asi como hago para pasar las excepciones desde la capa de ReglasNegocio pasando por los proyectos ServicioContratos y ServicioImplementacion y de aqui a la capa 'Presentacion'?
    2-Es correcto que en la capa de Presentacion haga referencia a esta capa Comun ?

    Muchas gracias.
    Saturday, January 14, 2012 12:09 AM

Answers

All replies

  • hola

    - primero algo que me llama la atencion, en el evento button1_Click usas

    IBancos ib = new BancosClient();

    pero esto es una instancia al proxy que se crea cuando realizas una "Service Reference"

     

    1 -

    recuerda que WCF usa los FaultException

    por eso seguramente veras que se usa el atributo
    [FaultContract(typeof(ConnectionFault))]
    no digo que uses el application block, pero si mira lo que dice
    This means that you have to specify the FaultContract to your service contract in order for receiving it in the client
    2-
    depende lo que esta capa comun defina, si son utilidades que extienden alguna funcionalidad simpel no veo el problema
    ahora si esta define reglas de validaciones, y aspectos que no son de su responsabilidad en ese caso no estaria bien
    a veces lo que se hace es crear un proyecto de nombre Presentacion.Comun
    y otro ReglasNegocio.Comun pero ambso referencian a otro de nombre "Comun"
    entonces peude especializar la funcionalidad si es que necesitas algo comun pero concreto para una determinada capa

    saludos

     


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    Saturday, January 14, 2012 3:30 AM
  • Gracias por tu respuesta, tienes algun ejemplo de esto ya que lo que quiero hacer es capturar una excepcion en la capa de negocios y pasarlos por el servicio para que llegue a la presentacion. Los ejemplos que he visto se refieren a definir FaultException que estan relacionados a la conexion con la base de datos pero ningun ejemplo que sea sobre excepciones a nivel de logica de negocios y como definirlas e ir pasandolas por las capas hasta llegar al usuario.

    Me queda la duda, de esta forma deberia atrapar la excepcion en la capa de reglas o hacerlo en los servicios ó en la implementacion de los servicios ?

     

    Gracias.

    Sunday, January 15, 2012 8:49 PM
  • Hola Andres,

    En este enlace tienes un video bastante bueno de Jorge Serrano

    http://www.secondnug.com/Hist%C3%B3ricodeEventos/EventosDesarrollo2011/tabid/108/ItemId/218/Default.aspx

    Excepciones en .Net

    Saludos,


    phurtado
    Sunday, January 15, 2012 9:01 PM
  • en la capa de negocio podrias capturar todos los errores y transformarlos

    en este articulo se plantea el tema

    Exception Handling in Windows Communication Framework and Best Practices                                                      

    si tienes algun Exception custom creado por ti podrias convertirlo en ese momento

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    Sunday, January 15, 2012 9:01 PM