2010-08-16 4 views
1

привет, пожалуйста, подтвердите мой код Правильный способ передать необязательный параметр методу. Если что-то не так, пожалуйста, предложите мне, если есть какое-нибудь лучшее решение.asp.net code quality проверить это

protected void Ok_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      if (Page.IsValid) 
      { 
       int course_id = Convert.ToInt32(course.SelectedValue); 
       int passoutYear = Convert.ToInt32(passout.SelectedValue); 
       int currentBacklog = Convert.ToInt32(currrentBacklogDDL.SelectedValue); 
       int sex = Convert.ToInt32(gender.SelectedValue); 
       int? eGap = null; 
       int? firstYrPercent = null; 
       int? secondYrPercent = null; 
       int? thirdYrPercent = null; 
       int? finalYearpercent = null; 
       int? currentDegeePercentage = null; 
       int? highSchoolPercentge = null; 
       int? higherSchoolPercentage = null; 
       int? grauationPercentage = null; 
       int? diplomaPercentage = null; 
       int? noOfAtkt = null; 

       string dateOfBirth = DOB.Text.Trim(); 
       DateTime birthDate = DateTime.ParseExact(dateOfBirth, "dd/mm/yyyy", System.Globalization.CultureInfo.InvariantCulture); 
       string outPut = birthDate.ToString("mm/dd/YYYY"); 
       DateTime date = Convert.ToDateTime(outPut); 

       if (!String.IsNullOrEmpty(educationGap.Text)) 
       { 
        eGap = Convert.ToInt32(educationGap.Text.Trim()); 
       } 
       if (!string.IsNullOrEmpty(firstYear.Text)) 
       { 
        firstYrPercent = Convert.ToInt32(firstYear.Text.Trim()); 
       } 
       if (!string.IsNullOrEmpty(secondYear.Text)) 
       { 
        secondYrPercent = Convert.ToInt32(secondYear.Text.Trim()); 
       } 
       if (!string.IsNullOrEmpty(thirdYear.Text)) 
       { 
        thirdYrPercent = Convert.ToInt32(thirdYear.Text.Trim()); 
       } 
       if (!string.IsNullOrEmpty(finalyear.Text)) 
       { 
        finalYearpercent = Convert.ToInt32(finalyear.Text.Trim()); 
       } 
       if (!string.IsNullOrEmpty(currentDegree.Text)) 
       { 
        currentDegeePercentage = Convert.ToInt32(currentDegree); 
       } 
       if (!string.IsNullOrEmpty(higherSchool.Text.Trim())) 
       { 
        higherSchoolPercentage = Convert.ToInt32(higherSchool.Text.Trim()); 
       } 
       if (!string.IsNullOrEmpty(highSchool.Text)) 
       { 
        highSchoolPercentge = Convert.ToInt32(highSchool.Text.Trim()); 
       } 
       if (!string.IsNullOrEmpty(graduation.Text)) 
       { 
        grauationPercentage = Convert.ToInt32(graduation.Text.Trim()); 
       } 
       if (!string.IsNullOrEmpty(diploma.Text)) 
       { 
        diplomaPercentage = Convert.ToInt32(diploma.Text.Trim()); 
       } 
       if (!string.IsNullOrEmpty(atkt.Text)) 
       { 
        noOfAtkt = Convert.ToInt32(atkt.Text.Trim()); 
       } 

       Dictionary<string, object> paramList = new Dictionary<string, object>(); 
       paramList.Add("@courseId", course_id); 
       paramList.Add("@passoutYear", passoutYear); 
       paramList.Add("@currentBacklog", currentBacklog); 
       paramList.Add("@sex", sex); 
       paramList.Add("@eGap", eGap); 
       paramList.Add("@firstYrPercent", firstYrPercent); 
       paramList.Add("@secondYrPercent", secondYrPercent); 
       paramList.Add("@thirdYrPercent", thirdYrPercent); 
       paramList.Add("@finalYearpercent", finalYearpercent); 
       paramList.Add("@currentDegeePercentage", currentDegeePercentage); 
       paramList.Add("@highSchoolPercentge", highSchoolPercentge); 
       paramList.Add("@higherSchoolPercentage", higherSchoolPercentage); 
       paramList.Add("@grauationPercentage", grauationPercentage); 
       paramList.Add("@diplomaPercentage", diplomaPercentage); 
       paramList.Add("@noOfAtkt", noOfAtkt); 

       StringBuilder branchId= new StringBuilder(); 
       foreach (ListItem li in branch.Items) 
       { 
        if (li.Selected) 
        { 
         branchId.Append(Convert.ToInt32(li.Value)); 
        } 
       } 
       DataTable dt = searchManager.GetEligibleStudent(paramList, branchId); 



      } 

     } 
     catch (Exception ex) 
     { 
      COMMON.logger.Error("Error On Button click Ok", ex); 
     } 
    } 

ответ

1

Немного грустно, что вы сначала преобразуете значения в правильное значение, а затем помещаете их в список объектов таким образом, что в GetEligibleStudent вам придется повторно использовать эти значения.

Мое предположение было бы создать класс для этого, так что, скажем, upperSchoolPercentage становится полем. Поскольку вы будете получать записи студентов назад, возможно, даже, что вы можете повторно использовать эту структуру.

НТН, Nic

UPDATE

создать класс как

class StudentQuery 
{ 
    public int course_id; 
    ... 
    public int? egap = null; 
    ... 

} 

затем, на странице, скажем

StudentQuery sq = new StudentQuery(); 

if (!String.IsNullOrEmpty(educationGap.Text)) 
{ 
    sq.eGap = Convert.ToInt32(educationGap.Text.Trim()); 
} 

Тогда вы можете сказать

DataTable dt = searchManager.GetEligibleStudent(sq, branchId); 

Подобно этому,

  • вы держите тип переменных
  • вы не должны создавать эту paramList
  • разделение между структурой задачи (поля, которые вы получили) и данные (который имеет значение для полей).

UPDATE 2

Поскольку единственный формат, в котором требуются эти поля, на самом деле, список ключ/значение, которое встроено здесь, чтобы быть переданы в команде SQL, я думаю, образец кода в порядке. Можно все-таки думать о реорганизации этого кода в отдельный метод, но мое предыдущее предложение о создании класса оказывается, по сути, лишним.

+0

Я appologise сэр, но я не получаю вас, Я передаю это параметрам метода, чтобы вызвать mehod класса бизнес-логики, где я получу данные, написав соответствующий запрос, чтобы получить таблицу данных как здесь – NoviceToDotNet

+0

общественного DataTable GetEligibleStudent (Dictionary <строка, объект> paramList, StringBuilder branchId) { попробовать { строка CMD = ""; // string cmd = "SELECT * FROM [tbl_branch] WHERE course_id IN (" + sb + ")"; if (dbManager.OpenConnection()) { dt = dbManager.GetDataTable (cmd, paramList); return dt; } else { dt = null; return dt; } } } – NoviceToDotNet

+0

Как я могу отредактировать приведенный выше код, он ограничивает меня помещением символов, и я не знаю, как отредактировать его, пожалуйста, дайте мне знать – NoviceToDotNet

0

Вы должны сделать все это, чтобы проверить и преобразовать в цикле.

+0

, пожалуйста, уточните меня, сэр, на этом я не получаю. Все проверки выполняются с помощью валидаторов – NoviceToDotNet

0

Я чувствую, если вы пишете нормальный компонент данных, который оказывает добытчик и сеттер, то будет более лучше, чем это ....

+0

можете ли вы отправить пример сэра или ссылку на код качества, пожалуйста, – NoviceToDotNet

+0

Я думаю, что он означает с помощью компонента данных очень похож на то, что я предлагаю (хотя bean должен быть немного более строгим с точки зрения переменных public vs правильных функций getter и setter;) – Nicolas78

0

Если вы планируете использовать этот метод поиска в других местах, вы должны использовать -структуру или класс для ваших параметров. Таким образом, вы можете сохранить безопасность типов в своем методе.

В настоящее время вам нужно будет написать дополнительный код для проверки типов, переданных для каждого ключа в вашем словаре. Вам не пришлось бы этого делать, если бы у вас был класс, так как у всех участников есть типы.

Это действительно стиль программирования. Некоторым разработчикам нравится поддерживать безопасность типа, если они абсолютно не могут больше. Другие любят, чтобы компилятор не работал. C# как язык пытается обратиться к обеим группам.Первоначально это был строго статически типизированный язык, но теперь у нас есть динамическая/утиная типизация.