我应该在后面的代码中还是在 BusinessLogic 类中使用这个函数
Posted
技术标签:
【中文标题】我应该在后面的代码中还是在 BusinessLogic 类中使用这个函数【英文标题】:Should I use this function in my code behind or BusinessLogic Class 【发布时间】:2012-07-04 16:39:25 【问题描述】:我正在使用ASP.NET Web Forms/C#
。
我正在使用此功能根据从州DropDownList
中选择的州填充城市DropDownLists
。州和城市有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());
这个基于 id 的函数将根据 id 参数填充适当的 City DropDownLists
。
目前在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;
什么是正确的方法。有人可以指导我吗?
欢迎提出任何建议。
【问题讨论】:
【参考方案1】:正确的方法是将项目单独添加到下拉列表和业务逻辑:
// 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 元素。
【讨论】:
感谢您的帮助。我需要彻底了解它,因为这对我来说有点难以理解。谢谢。【参考方案2】:应该在您的业务逻辑层上。原因之一是您还想在其他表单上使用此功能,因此,您只需调用它即可。
BLL
将处理业务领域的一部分,而不是数据库的一部分,而不是 UI 的一部分(通常)。例如,使用customer
的年龄来确定他们是否有资格获得特殊老年人折扣。 DAL 不应该这样做,它应该只是检索客户数据,然后在 BLL
完成工作后将其与折扣数据一起存储。
-
它将您的所有业务逻辑本地化,集中在一个地方。因此,未来的变化会容易得多。
它允许您更轻松地对业务逻辑进行单元测试。这是一个很大的。如果此代码与您的网页或窗体紧密耦合,则很难针对您的业务逻辑编写自动化单元测试。
它让您的 UI 更加纤薄。
【讨论】:
感谢您的回答,我正在尝试将其移至 BLL,如果可能的话,您能否参考此示例提供帮助。谢谢。以上是关于我应该在后面的代码中还是在 BusinessLogic 类中使用这个函数的主要内容,如果未能解决你的问题,请参考以下文章