1

我正在使用ASP.NET Web Forms/C#.

我正在使用此功能DropDownLists根据从州中选择的州填充城市。州和城市DropDownList有 3 个DropDownLists。(住宅、本地、办公室)。

这是我的功能。

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());
        }
    }
}

DropDownLists这个基于 id 的函数将根据 id 参数填充适当的城市。

这是目前在。code behind我的问题是是否应该在这里使用这个功能,或者我应该把它移到我的Business Logic class. 这是我的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;
            }
        }
    }
}

什么是正确的方法。有人可以指导我吗?

欢迎任何建议。

4

2 回答 2

3

正确的方法是将项目单独添加到下拉列表和业务逻辑:

// 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;}
 }

这样,您可以在不触及 UI 元素的情况下测试所有条件,您可以在不触及业务逻辑的情况下替换 UI 元素。

于 2012-07-04T07:57:40.570 回答
1

应该在您的业务逻辑层上。原因之一是您还想在其他表单上使用此功能,因此,您只需调用它即可。

它将处理属于业务领域的BLL一部分,而不是数据库的一部分,也不是 UI 的一部分(通常)。例如,使用 a 的年龄customer来确定他们是否有资格享受特殊老年人的折扣。DAL 不应该这样做,它应该只是检索客户数据,然后在BLL完成工作后将其与折扣数据一起存储。

  1. 它将您的所有业务逻辑本地化,并在一个地方。因此,未来的变化会容易得多。
  2. 它使您可以更轻松地对业务逻辑进行单元测试。这是一个很大的。如果此代码与您的网页或 Windows 窗体紧密耦合,则很难针对您的业务逻辑编写自动化单元测试。
  3. 它使您的 UI 更加纤薄。
于 2012-07-04T07:56:13.813 回答