Приложение c# Windows Forms: отделить графический интерфейс от бизнес-логики

Я хотел бы получить несколько советов о том, как разделить пользовательский интерфейс и бизнес-логику в простом приложении C# Windows Forms.

давайте возьмем такой пример:

пользовательский интерфейс состоит из простого текстового поля и кнопки. Пользователь вводит число от 0 до 9 и нажимает кнопку. Программа должна добавить 10 к числу и обновить текстовое поле с этим значением.

enter image description here

часть бизнес-логики не должна иметь представления о пользовательском интерфейсе. Как это может быть свершилось?

вот пустой класс процесса (бизнес-логика):

namespace addTen
{
    class Process
    {
        public int AddTen(int num)
        {
            return num + 10;
        }
    }
}

требование:

  1. когда пользователь нажимает кнопку, каким-то образом вызывается процесс::AddTen.
  2. текстовое поле должно быть обновлено возвращаемым значением Process:: AddTen.

Я просто не знаю, как соединить эти два.

3 ответов


во-первых, нужно изменить имя класса. "


сделайте свой класс "Process" общедоступным (и, как говорит @DavidStratton, измените имя):

public class MyProcess

Я бы сказал, что вы должны разобрать свой string значение TextBox.Text до int:

private void button1_Click(object sender, EventArgs e)
{
    MyProcess myProcess = new MyProcess();
    string result = textBox1.Text;
    int number;

    if(int.TryParse(textBox1.Text, out number))
    {
        result = myProcess.AddTen(number).ToString();
    }

    textBox1.Text = result;
}

вы можете создать другой класс под названием " Process.КС" например. Методы, которые включают обработку или расчет данных, которые вы перемещаете туда. В вашем случае например:

public class Process
{
 public int AddTen(int num)
 {
   return num + 10;
 }
}

событие щелчка пользовательского интерфейса будет иметь вызов вашего "слоя процесса":

 var myProcess = new Process();
  //and then calculation
  var initNumber = Convert.ToInt32(textBox.Text);
  var calculatedValue = myProcess.AddTen(initNumber);

  textBox.Text = calculatedValue.ToString();

таким образом, ваша бизнес-логика, такая как вычисление, хранится отдельно. Если ваш пользовательский интерфейс изменяется, вы все равно можете просто вызвать myProcess.Метод AddTen (), будь то веб -, Windows или мобильная форма.