2011-01-03 10 views
1
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(プレゼンテーション層)のバックエンドで、同じ規則は、地域や都市に適用されます。

このスニペットのデザインは問題ありませんか?言い換えれば、プレゼンテーションレイヤーの標準デザインを満たしていますか?このスニペットのデザインを改善するにはどうすればいいですか?

私はこれに新しいです、私はそれをゆっくりと確実に取るようにしています。

+0

これはOKです... – Xaqron

答えて

3

名前付け規則にはいくつかの作業が必要だと思います。クラスとメソッドの名前について注意深く考えてください。例えば

(クラス名):

あなたはそれが国を表し示唆国と呼ばれるクラスを持っています。しかし、私はそうは思わない。それは、それが国のデータテーブルを作成する責任があるように見えます。

別の例(メソッド名):

あなたはRegion.GetRegionIDというメソッドを持っています()。これはRegionIdに基づいてRegionを取得するように見えますが(私は完全にはわかりません)、GetByRegionIdを好むでしょう。クラス名の批判も同じです。

+0

も参照してください。良い.... – user311509

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のほんの少しの方法でした。

+0

うん、興味深い... – user311509

+0

これは*接線*にある可能性があります。私はそれを拡張メソッドとして本当に好きです。 'ddlRegion.LoadData(new Region()。GetRegionID ...)' –

+0

同意する - はるかにクリーナー –

1

ddlCountry_SelectedIndexChangedではこれはどうですか?

loadRegions();

ddlRegion.Enabled =(!ddlRegion.SelectedItem.Text.Equals( "No Province")); load301

+0

!驚くばかり ! ... Creative回答 – user311509

1

私は、UIのDataTableを直接使用していることがわかります。長期的には保守性の問題が発生します。

データベースの列名がUIで直接使用されるように、DataTableを使用しています。

したがって、UIコードはDataAccessレイヤーに直接依存しています。

データベースの列名の代わりにビジネスプロパティを使用する必要があると思います。

+0

実際には、ビジネスオブジェクトクラスにあるGetDataTableはこれを返します。 "return DAL.GetDataTable(SQLCommand);" DALはシングルトンです。 SQLCommandは動的に(リフレクションを使用して)渡されます。 – user311509

+0

@ user311509:BusinessObjectは、ReadOnlyCollection またはList を返します。つまり、DataTableをList <>に変換してからUIレイヤで使用する必要があります。 – dhinesh

関連する問題