¿Debo usar esta función en mi código subyacente o BusinessLogic Class?

Estoy utilizando ASP.NET Web Forms/C#.

Estoy usando esta función para llenar la ciudad DropDownLists basado en el estado seleccionado de Estado DropDownList.Hay 3 DropDownLists para Estado y Ciudad. (Residencial, Nativo, Oficina).

Esta es mi función.

public void CityFill(int index,int id)
{          
    var city = CustomerBLL.GetCities(index);

    //Loop through all the cities in st object
    foreach (var c in city)
    {
        //If id=0 then fill all dropdowns
        if (id == 0)
        {
            NewCustomerddlResidentialCity.Items.Add(c.city_name.Trim());
            NewCustomerddlOfficeCity.Items.Add(c.city_name.Trim());
            NewCustomerddlNativeCity.Items.Add(c.city_name.Trim());
            NewCustomerddlNomineeCity.Items.Add(c.city_name.Trim());
        }
        else
        {
            //If 1 then fill Res City
            if(id==1)
                NewCustomerddlResidentialCity.Items.Add(c.city_name.Trim());

            //If 2 then fill Off City
            if(id==2)
                NewCustomerddlOfficeCity.Items.Add(c.city_name.Trim());

            //If 3 then fill nat city
            if(id==3)
                NewCustomerddlNativeCity.Items.Add(c.city_name.Trim());
        }
    }
}

Esta función basada en la identificación llenará la ciudad apropiada DropDownLists basado en el argumento id.

Esto está actualmente en code behind.Mi pregunta es si esta función debe usarse aquí o debo moverla a mi Business Logic class. Aquí está mi CustomerBLL.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Drawing;
using System.Text.RegularExpressions;
using System.Data.SqlClient;
using System.Threading;
using System.Globalization;
using System.Web.Services;
using System.IO;
using System.Xml.Linq;
using System.Web.Security;
using System.Text;

namespace CwizBankApp
{
    public class CustomerBLL
    {
        public IList<mem_city> GetCities(int index)
        {
            using (var db = new DataClasses1DataContext())
            {
                var city = db.mem_cities.Where(c => c.state_id.Equals(index)).ToList();
                return city;
            }
        }
    }
}

¿Cuál es un enfoque adecuado? ¿Alguien puede guiarme sobre esto?

Cualquier sugerencia es bienvenida.

preguntado el 04 de julio de 12 a las 08:07

2 Respuestas

El enfoque adecuado sería agregar elementos por separado a la lista desplegable y la lógica comercial:

// this goes to business logic
public CitiesView GetCities(int id) {
       var cities = new CitiesCollection();
       var city = CustomerBLL.GetCities(index);

        //Loop through all the cities in st object
        foreach (var c in city)
        {
            //If id=0 then fill all dropdowns
            if (id == 0)
            {
                cities.Residental.Add(c.city_name.Trim());
                cities.Office.Add(c.city_name.Trim());
                cities.Native.Add(c.city_name.Trim());
                cities.Nominee.Add(c.city_name.Trim());
            }
            else
            {
                //If 1 then fill Res City
                if(id==1)
                    cities.Residental.Add(c.city_name.Trim());

                //If 2 then fill Off City
                if(id==2)
                cities.Office.Add(c.city_name.Trim());

                //If 3 then fill nat city
                if(id==3)
                cities.Native.Add(c.city_name.Trim());
            }
        }
  }

  // this goes to code behind
  public void FillCitiesDrowDowns(int id) {
       var citiesView = GetCities(id);
       NewCustomerddlResidentialCity.Items.AddRange(citiesView.Residental);
       NewCustomerddlOfficeCity.Items.Add(citiesView.Office);
       NewCustomerddlNativeCity.Items.Add(citiesView.Native);
       NewCustomerddlNomineeCity.Items.Add(citiesView.Nominee);    
 }

 public class CitiesView {
     public List<string> Residental {get;set;}
     public List<string> Office {get;set;}
     public List<string> Native {get;set;}
     public List<string> Nominee {get;set;}
 }

De esa manera, puede probar todas sus condiciones sin tocar los elementos de la interfaz de usuario, puede reemplazar los elementos de la interfaz de usuario sin tocar la lógica comercial.

Respondido 04 Jul 12, 08:07

Gracias por la ayuda. Necesito revisarlo a fondo ya que es un poco difícil para mí seguirlo. Gracias. - priyank patel

Debe estar en su capa de lógica de negocios. Una de las razones es que también desea usar esta funcionalidad en otros formularios, así que simplemente llámelo.

El BLL manejaría cosas que son parte del dominio comercial, no una parte de la base de datos y no una parte de la interfaz de usuario (generalmente). Por ejemplo, utilizando la edad de un customer para determinar si califican para un descuento especial para personas mayores. El DAL no debería estar haciendo esto, simplemente debería estar recuperando los datos del cliente y luego almacenándolos con los datos de descuento después del BLL ha hecho su trabajo.

  1. Mantiene toda su lógica comercial localizada y en un solo lugar. Como resultado, los cambios futuros serán mucho más fáciles.
  2. Le permite realizar más fácilmente pruebas unitarias de su lógica empresarial. Este es un grande. Es muy difícil escribir pruebas unitarias automatizadas contra su lógica comercial si este código está estrechamente vinculado a su página web o formulario de Windows.
  3. Mantiene su interfaz de usuario mucho más delgada.

Respondido 04 Jul 12, 09:07

Gracias por la respuesta, estoy tratando de mover esto a BLL, ¿puede ayudarme con referencia a este ejemplo, si es posible? Gracias. - priyank patel

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.