Пишем собственный секундомер на основе паттерна MVP

Приветствую всех, сегодня напишем программу секундомер, на основе паттерна MVP. Данный урок так же позволит вам лучше понять и усвоит материал по событиям. Так как паттерн mvp построен на основе событийной модели.

Для начала нам надо создать проект WindowsForm, назовите его как хотите, у меня имя проекта StopWatch. Разместите на главной форме три кнопки и переименуйте их так что бы у вас было похоже как на рисунке, так же ниже кнопок расположите TextBox. Не обходимо еще добавить компонент Timer и установить ему интервал в 1000 миллисекунд, так же изменит доступ на public это же надо сделать и с TextBox.

Далее нам необходимо создать 2 класса это Model в этом классе у нас будет храниться значения переменной времени. И класс Presenter в котором будет происходить взаимодействие с классом формы и Model, а так же реализована логика программы. Класса View с таким именем нет, у нас он Form1 заменяет его. И так для начало создадим события по клику на кнопки с формы.

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

    
        private void button1_Click(object sender, EventArgs e)
        {
        }
        private void button2_Click(object sender, EventArgs e)
        {
        }
        private void button3_Click(object sender, EventArgs e)
        {
        }
    }

В конструкторе формы создаем экземпляр класса Presenter и передаем ему ссылку Form1. Теперь создадим события Start Stop Reset и перевызовим и с параметрами в событий на кнопках.  В итоге у нас должно получить вот так:

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            new Presenter(this);
        }
 
        public event EventHandler Start;
        public event EventHandler Stop;
        public event EventHandler Reset;
    
        private void button1_Click(object sender, EventArgs e)
        {
            Start(sender,e);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Stop(sender,e);
        }

        private void button3_Click(object sender, EventArgs e)
        {
            Reset(sender, e);
        }
    }

Теперь перейдем к классу Model здесь заведем переменную хранящую время в секундах и метод который будет вызываться каждую секунду и возвращать значения с переменной.

    class Model
    {
        internal int s;
      
        public string Time()
        {
            s++;
            return (s >= 60)? "мин. "+s/60+" сек. "+s%60 :s.ToString();
        }
    }

Теперь перейдем к классу Presenter в котором будет происходить логика программы:

 class Presenter
    {
        private readonly Form1 view;
        Model model;

        public Presenter(Form1 form1)
        {
            model = new Model();
            view = form1;

            view.Start += View_Start;
            view.Stop += View_Stop;
            view.Reset += View_Reset;
            view.timer1.Tick += TimerTick;
            view.timer1.Start();
            view.timer1.Enabled = false;
        }

        private void TimerTick(object sender, EventArgs e)
        {
            view.textBox1.Text=model.Time();
        }

        private void View_Reset(object sender, EventArgs e)
        {
            model.s = 0;
            view.timer1.Stop();
            view.textBox1.Text = "0";
        }

        private void View_Stop(object sender, EventArgs e)
        {
            view.timer1.Stop();
            view.timer1.Enabled = false;
        }

        private void View_Start(object sender, EventArgs e)
        {
            view.timer1.Start();
            view.timer1.Enabled = true;
        }

        
    }

На этом завершили создание нашего приложения, по ссылке ниже можете скачать мою версию программы:

Скачать

Обновлено: 29.03.2018 — 17:39

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.