Эталонная реализация MVP в WinForms

106
09 июня 2021, 06:50

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

Form1

public partial class Form1 : Form
    {
        Model _model;
        View _view;
        Presenter _presenter;
        public Form1()
        {
            InitializeComponent();
            _model = new Model();
            _view = new View(label1);
            _presenter = new Presenter(_view, _model);
            button1.Click += (s, e) =>
            {
                _view.RefreshView();
            };
        }
    }

Model

class Model
    {
        private int count = 0;
        public void IncCount()
        {
            count++;
        }
        public int GetCount()
        {
            return count;
        }
    }

View

delegate void ViewChanged();
    class View
    {
        public event ViewChanged OnViewChanged;
        private Label _label;
        public View(Label label)
        {
            _label = label;
        }
        public void RefreshView()
        {
            OnViewChanged();
        }
        public void ChangeLabel(string data)
        {
            _label.Text = data;
        }
    }

Presenter

class Presenter
    {
        View _view;
        Model _model;
        public Presenter(View view, Model model)
        {
            _view = view;
            _view.OnViewChanged += _view_OnViewChanged;
            _model = model;
        }
        private void _view_OnViewChanged()
        {
            _model.IncCount();
            _view.ChangeLabel(_model.GetCount().ToString());
        }
    }
READ ALSO
Передача типов с интерфейсом в параметры метода расширения C#

Передача типов с интерфейсом в параметры метода расширения C#

Долго бился над этим вопросом, штудируя литературу и неистово насилуя гугл, но так и не нашел решения, может кто здесь подскажет

98
Ошибки работы VisualStudio с репозиторием

Ошибки работы VisualStudio с репозиторием

Помогите разобраться с проблемойПосле синхронизации репозитория с azure devops, у меня с двумя формами в проекте возникает проблема

85
Массовое сравнение таблиц MySql и удаление строк

Массовое сравнение таблиц MySql и удаление строк

В базе есть таблица "Users", в ней есть колонка user_id (числовое значение) Любой юзер может создать объявление(строку) в таблице "obj", которому будет...

79
Как решить проблему с древовидной структурой?

Как решить проблему с древовидной структурой?

Всем привет мне надо сделать древовидную структуру!

113