Хороший способ определить метод - PullRequest
0 голосов
/ 16 сентября 2010

Каков наилучший / хороший способ реализации вызовов методов.

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

Вариант 1:

   private void BtnPostUpdate_Click(object sender, EventArgs e)
    {
        getValue();
    }

    private void getValue()
    {
        String FileName = TbxFileName.Text;
        int PageNo = Convert.ToInt32(TbxPageNo.Text);

        // get value from Business Layer
        DataTable l_dtbl = m_BLL.getValue(FileName, PageNo);

        if (l_dtbl.Rows.Count == 1)
        {
            TbxValue.Text = Convert.ToInt32(l_dtbl.Rows[0]["Value"]);
        }
        else
        {
            TbxValue.Text = 0;
        }
    }

Вариант 2:

    private void BtnPostUpdate_Click(object sender, EventArgs e)
    {
        String FileName = TbxFileName.Text;
        int PageNo = Convert.ToInt32(TbxPageNo.Text);

        int Value = getValue(FileName, PageNo);

        TbxValue.Text = Value.ToString();

    }

    private int getValue(string FileName, int PageNo)
    {
        // get value from Business Layer
        DataTable l_dtbl = m_BLL.getValue(FileName, PageNo);

        if (l_dtbl.Rows.Count == 1)
        {
            return Convert.ToInt32(l_dtbl.Rows[0]["Value"]);
        }
        return 0;
    }

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

Ответы [ 3 ]

6 голосов
/ 16 сентября 2010

Если вы подписываетесь на событие автоматически, я не думаю, что особенно плохо иметь метод с сигнатурой обработчика событий, который просто делегирует методу, который имеет "настоящую" сигнатуру, которая вам нужна (в данном случае,без параметров).

Если вы подписываетесь вручную, вы можете использовать вместо этого лямбда-выражение:

postUpdateButton.Click += (sender, args) => PostUpdate();

, а затем выполнить работу в PostUpdate.Разделили ли вы затем PostUpdate на два метода: один для взаимодействия с пользовательским интерфейсом, а второй для взаимодействия с BLL - решать только вам.В этом случае я не думаю, что это имеет большое значение.

Как вы структурируете логику пользовательского интерфейса, чтобы сделать ее тестируемой, это совсем другой вопрос.Недавно я стал поклонником шаблона MVVM, но я не знаю, насколько это применимо к вашему конкретному сценарию (он действительно разработан на основе Silverlight и WPF).

Несколько других комментариев:

  • Обычно параметры должны быть в CamelCased, а не в PascalCased
  • Вы действительно уверены, что получаете выгоду от префикса локальных переменных с l_?Разве не очевидно, что они местные?Лично я не заинтересован в большинстве имен переменных, показанных здесь - рассмотрите возможность именования переменных после их , означающего , а не их type .
  • Использование DataTable длявозвращаемая информация является несколько подверженным ошибкам способом ведения дел.Почему BLL не может вернуть int?, чтобы указать значение (или отсутствие значения)?
1 голос
/ 16 сентября 2010

вот что мне нравится, если я не использую mvc. и я предполагаю, что сеть здесь.

Сначала я выбрал бы вариант 2, но вместо того, чтобы код кнопок устанавливал идентификатор текста, создайте свойство для установки значения текстовых полей.

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

0 голосов
/ 16 сентября 2010

Согласно вашему примеру, вариант 2 - это путь. Вариант 1 знает о вашей форме и как отображать на ней данные, что нарушает SRP .

...