2015-11-14 3 views
-1

Если есть возможность улучшить следующий код, мне это понравится.Как улучшить следующий код

У меня есть DropDownList на моей странице (показаны все категории), один для фильтрации сообщений и один для создания нового сообщения. Это код:

if (!IsPostBack) 
     { 
      ddlCategory.DataSource = BindDDlCategory(); 
      if (!IsPostBack) 
      { 
       ddlCategory.DataTextField = "Name"; 
       ddlCategory.DataValueField = "Id"; 
      } 
      ddlCategory.DataBind(); 

      if (ddlCategory.Items.Count == 0) 
       ddlCategory.Items.Insert(0, new ListItem("Não há nenhuma categoria cadastrada", "108", true)); 
      else 
       ddlCategory.Items.Insert(0, new ListItem("Todas as categorias", "108", true)); 

      ddlCategoryNP.DataSource = BindDDlCategory(); 
      if (!IsPostBack) 
      { 
       ddlCategoryNP.DataTextField = "Name"; 
       ddlCategoryNP.DataValueField = "Id"; 
      } 
      ddlCategoryNP.DataBind(); 
      if (ddlCategoryNP.Items.Count == 0) 
       ddlCategoryNP.Items.Insert(0, new ListItem("Não há nenhuma categoria cadastrada", "108", true)); 
      else 
       ddlCategoryNP.Items.Insert(0, new ListItem("Escolha uma categoria", "108", true)); 
     } 

Метод BindDDlCategory является:

protected DataTable BindDDlCategory() 
     { 
      Read readCategoryNP = new Read(); 
      return readCategoryNP.Category(); 
     } 

readCategoryNP показывает мне DataTable на моей базе данных.

+4

следует использовать анализ кода для этого: http://codereview.stackexchange.com/ –

+1

Я знал, что не было 'Отзыв кода. Виноват. Благодарю. –

+0

Если вы хотите переписать на [CodeReview.se], обязательно включите рабочий код и некоторые примеры. – holroy

ответ

3

Я согласен с @Kemal, это должно быть на обзоре кода. Вот мои 2 цента:

-- your code, reduced 
if (!IsPostBack) 
{ 
    var dataSource = BindDDlCategory(); 
    PrepareDDL(ddlCategory, dataSource); 
    PrepareDDL(ddlCategoryNP, dataSource); 
} 

-- new method 
private void PrepareDDL(DropDownList ddl, DataTable dataSource) 
{ 
    ddl.DataSource = dataSource; 
    ddl.DataTextField = "Name"; 
    ddl.DataValueField = "Id"; 
    ddl.DataBind(); 

    string message = ddl.Items.Count 
     ? "Não há nenhuma categoria cadastrada" 
     : "Todas as categorias"; 
    ddl.Items.Insert(0, new ListItem(message, "108", true)); 
} 

-- and the existing method 
protected DataTable BindDDlCategory() 
{ 
    return new Read().Category(); 
} 
0

В вашем методе есть 2 блока кода, выполняющих привязку, которые идентичны, кроме используемого ddl. Почему бы не создать метод, который принимает ddl в качестве аргумента, а затем применит привязку к нему. DRY :)

0

может быть:

if (!IsPostBack) 
{ 
    BindCategory(); 
} 

protected void BindCategory() 
{ 
    ddlCategory.DataSource = BindDDlCategory(); 
    ddlCategory.DataTextField = "Name"; 
    ddlCategory.DataValueField = "Id"; 
    ddlCategory.DataBind(); 

    string aditionalItem = (ddlCategory.Items.Count == 0) ? "Não há nenhuma categoria cadastrada" : "Todas as categorias" 
    ddlCategory.Items.Insert(0, new ListItem(aditionalItem, "108", true)); 

    //since both are equas, bind here in order to avoid calling BindDDlCategory() again: 
    ddlCategoryNP.DataSource = BindDDlCategory(); 
    ddlCategoryNP.DataTextField = "Name"; 
    ddlCategoryNP.DataValueField = "Id"; 
    ddlCategoryNP.DataBind(); 
    ddlCategoryNP.Items.Insert(0, new ListItem(aditionalItem, "108", true));  
} 
Смежные вопросы