¿Debo usar esta función en mi código subyacente o BusinessLogic Class?
Frecuentes
Visto 940 equipos
1
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.
2 Respuestas
3
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
1
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.
- Mantiene toda su lógica comercial localizada y en un solo lugar. Como resultado, los cambios futuros serán mucho más fáciles.
- 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.
- 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 c# asp.net code-behind business-logic-layer or haz tu propia pregunta.
Gracias por la ayuda. Necesito revisarlo a fondo ya que es un poco difícil para mí seguirlo. Gracias. - priyank patel