评估我的代码设计 - 简单的代码片段

时间:2011-01-03 02:53:38

标签: c# asp.net design-patterns

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        loadCountries();
        loadRegions();
        loadCities();
    }
}

private void loadCountries()
{
    Country country = new Country();
    ddlCountry.DataSource = country.GetDataTable();
    ddlCountry.DataTextField = "countryName";
    ddlCountry.DataValueField = "countryID";
    ddlCountry.DataBind();
}

private void loadRegions()
{
    Region region = new Region();
    ddlRegion.DataSource = region.GetRegionID(ddlCountry.SelectedValue);
    ddlRegion.DataTextField = "regionName";
    ddlRegion.DataValueField = "regionID";
    ddlRegion.DataBind();

}

private void loadCities()
{
    City city = new City();
    ddlCity.DataSource = city.GetCityID(ddlRegion.SelectedValue);
    ddlCity.DataTextField = "cityName";
    ddlCity.DataValueField = "cityID";
    ddlCity.DataBind();
}

protected void ddlCountry_SelectedIndexChanged(object sender, EventArgs e)
{
    loadRegions();
    if (ddlRegion.SelectedItem.Text == "No Province")
    {
        ddlRegion.Enabled = false;
        loadCities();
    }
    else
    {
        ddlRegion.Enabled = true;
        loadCities();
    }
}

代码是Default.aspx(表示层)的后端

与Country相关的任何业务逻辑都被放入Country类,同样的规则应用于Region和City。

这个代码段设计好吗?换句话说,它是否符合表示层标准设计?如何改进此代码段设计(如果可能)?

我是新手,我试着确保我慢慢地,但肯定地。

4 个答案:

答案 0 :(得分:3)

void loadDropDown(ComboBox cb, Object Source, string textField, string valueField)
{
   cb.DataSource = Source;
   cb.DataTextField = textField;
   cb.DataValueField = valueField;
   cb.DataBind();
}

//loadRegions
loadDropDown(ddlRegion,  new Region().GetRegionID(ddlCountry.SelectedValue), "regionName", "regionID");

//etc for the other dropdown lists

但为了更全面地回答你的问题,它看起来不错。该代码是所有UI,因此这似乎是合理的。我的代码只是DRY的一个小方法。

答案 1 :(得分:3)

我认为命名约定需要一些工作。仔细考虑你的类和方法的名称。

例如(类名):

您有一个名为Country的类,表示它代表一个国家/地区。但是,我不认为这样做。看起来它负责创建国家数据表。

和另一个例子(方法名称):

您有一个名为Region.GetRegionID()的方法。它看起来(但我不完全确定)好像这得到一个基于RegionId的Region,所以我更喜欢GetByRegionId。对班级名称的同样批评也适用。

答案 2 :(得分:1)

ddlCountry_SelectedIndexChanged中的这个怎么样?

  

loadRegions();

     

ddlRegion.Enabled =(!ddlRegion.SelectedItem.Text.Equals(“No Province”));

     

loadCities();

答案 3 :(得分:1)

我看到你在UI中直接使用DataTable。从长远来看,这将导致可维护性问题。

您正在使用DataTable,因此直接在UI中使用数据库的列名。

因此,您的UI代码直接依赖于DataAccess层。

我认为您应该使用业务属性而不是数据库列名。