Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
1 / 1 / 0
Регистрация: 10.10.2021
Сообщений: 57

Разбираюсь с паттерном MVP

04.07.2023, 11:10. Показов 3489. Ответов 48
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени, всем!


MVP

Правильно ли я уловил суть?


Model

Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
namespace Test.Core
{
    public class DataBase
    {
        // описал "шаблон" для делегата
        public delegate void DataBaseChangedDelegate(string message);
 
        // описал событие
        public event DataBaseChangedDelegate? DataBaseChanged;
 
        // описал базу данных
        public List<string[]> dataBase = new ();
 
        // метод добавления в базу данных
        public void Add(string[] str)
        {
            // добавление в коллекцию
            dataBase.Add(str);
            
            // передаю в событие сообщение
            if (DataBaseChanged is not null)
                DataBaseChanged ("Операция добавления в базу данных...");
        }
 
        // метод удаления из базы данных
        public void Remove(string[] str)
        {
            // удаление из коллекции
            dataBase.Remove(str);
            
            // передаю в событие сообщение
            if (DataBaseChanged is not null)
                DataBaseChanged ("Операция удаления из базы данных...");
        }
    }
}

View

Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
namespace Test.Core
{
    public class Viewer
    {
        public void Message(string message) => Console.WriteLine(message);
    }
}

Presenter

Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
namespace Test.Core
{
    class Program
    {
        static void Main()
        {
            DataBase dataBase = new ();
 
            dataBase.DataBaseChanged += DataBaseChanged;
 
            dataBase.Add(new string[4]);
 
            dataBase.Remove(new string[4]);
        }
 
        static void DataBaseChanged(string str)
        {
            Viewer viewer= new ();
 
            viewer.Message(str);
 
            viewer.Message("База данных изменена!");
        }
    }
}


Что лучше использовать в моём случае для Model, View - Класс, Абстрактный класс, Интэрфейс или др.?

Спасибо!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.07.2023, 11:10
Ответы с готовыми решениями:

Как рисовать на форме? Пользуюсь MVP паттерном
День добрый! У меня или навык гугленья сломался или что-то еще, поэтому прошу помощи реальных людей. Есть форма собственно часть...

Разобраться с паттерном Decorator
Добрый день. У кого есть время и терпенье, помогите разобрать с декоратором… (На примере С#) Хочу добавить к классу DirectoryInfo метод...

Регулярные выражения с переменным паттерном
Мне нужно отправлять личные сообщения людям из небольшого списка на одном форуме. За один раз можно отправлять сообщения пяти...

48
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
17.09.2023, 11:01
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от zaka4kin Посмотреть сообщение
Допускается ли в MVP перекладывание части логики из Model в Presenter, например, в консольных приложениях?
Перекладывание - нет.
Реализации логики необходимой для согласования Представления и Модели - да.

Цитата Сообщение от zaka4kin Посмотреть сообщение
примеры ниже
Не понял какую логику вы этом примере подразумеваете под "переложенной".
0
1 / 1 / 0
Регистрация: 10.10.2021
Сообщений: 57
17.09.2023, 13:05  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Не понял какую логику вы этом примере подразумеваете под "переложенной".
у меня в голове постоянно крутится, что данные и логика - это Model
и если я некоторую "обработку" (логику) переношу в другой слой, то это плохо
решил уточнить, чтобы потом не запутаться и не переделывать
значит у меня всё норм? и если принять во внимание это:

Цитата Сообщение от Элд Хасп Посмотреть сообщение
Реализации логики необходимой для согласования Представления и Модели - да.
я на правильном пути?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
17.09.2023, 13:08
Цитата Сообщение от zaka4kin Посмотреть сообщение
значит у меня всё норм?
Я не понял какую логику в Презентере вы имеете ввиду.
Свитч что ли?
0
1 / 1 / 0
Регистрация: 10.10.2021
Сообщений: 57
17.09.2023, 13:11  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Я не понял какую логику в Презентере вы имеете ввиду.
Свитч что ли?
да. и IF за ним.

Добавлено через 47 секунд
можно ли что то дополнительно вычислять и обрабатывать ВНЕ Model ?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
17.09.2023, 13:22
Цитата Сообщение от zaka4kin Посмотреть сообщение
можно ли что то дополнительно вычислять и обрабатывать ВНЕ Model ?
Можно.
Разделение функционала во многом зависит от ТЗ.

В паттернах MV* основная часть приложения это Модель.
Пока не определён её функционал, независящий от View, требования к ней, то нельзя сказать, что относится к её функциям, а что функции согласования Модели и View.

Для начала "выбросите из головы" View и Презентер. Что вы хотите реализовать в Бизнес Логике приложения? Какой общий функционал будет условно у "Модели работающей на Луне"? Без всякого UI?
1
1 / 1 / 0
Регистрация: 10.10.2021
Сообщений: 57
22.09.2023, 16:15  [ТС]
Добрейшего времени...

Элд Хасп, а можно попросить написать пример по типу как в статье только под WinForms?
интересует точка вхождения. то есть Презентёр наследованный от Form или всё-таки View, создающий Презентёр как тут:

https://github.com/Intern-box/... ch/View.cs

https://github.com/Intern-box/... esenter.cs

https://github.com/Intern-box/... h/Model.cs


и есть ли возможность привязаться к событиям отсюда вот здесь?

p.s.: блин! непросто! с языком Ассемблера было проще там была безусловная адресация
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
22.09.2023, 18:02
Цитата Сообщение от zaka4kin Посмотреть сообщение
интересует точка вхождения. то есть Презентёр наследованный от Form или всё-таки View, создающий Презентёр как тут:
Проблема "чистой реализации" всех MV* паттернов на платформах GUI - это то что в типовой реализации приложений на этих платформах, точка вхождения в приложения это проект с View. Поэтому не разделяются App и View. Из-за этого не получается построить полностью правильную абстракцию.

Пример изменения точки вхождения есть здесь Пример создания приложения "Работа с комнатами в студенческих общежитиях": namespace SQLiteModel - class Program.
Сразу предупреждаю - писал давно. Скорее всего есть ошибки. Но как пример демонстрирующий проблему и её решение подойдёт.

Цитата Сообщение от zaka4kin Посмотреть сообщение
пример по типу как в статье только под WinForms?
Придумаю какой-то простой пример и дополню статью.
Проблема не в самом создании, а в упрощении до такой степени, чтобы подошло для статьи.

Цитата Сообщение от zaka4kin Посмотреть сообщение
и есть ли возможность привязаться к событиям отсюда вот здесь?
Да.
Надо объявить интерфейс для View с событиями.
View будет его реализовывать. Кликеры (или другие внутренние события) будут подымать события интерфейса.
Презентер подписывается на события интерфейса View.

Добавлено через 5 минут
Цитата Сообщение от Элд Хасп Посмотреть сообщение
какой-то простой пример и дополню статью.
В идеале надо создать только Форм-View к примеру. Но пример построен на ожидающем вводе. Сделать такой ввод в Формах - потребуется много кода, как я думаю.
Хотя можно просто MessageBox вызывать...
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
24.09.2023, 02:57
zaka4kin, я добавил в статью Model-View-Presenter | Википедия пример Представления на Формах.
1
1 / 1 / 0
Регистрация: 10.10.2021
Сообщений: 57
24.09.2023, 17:10  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
zaka4kin, я добавил в статью Model-View-Presenter | Википедия пример Представления на Формах.
Примного благодарен!
изучу на выходных
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.09.2023, 17:10

Не могу разобраться с паттерном Стратегия
Здравствуйте. Изучал раньше Java, сейчас хотел попробывать себя в шарпе. Но столкнулся с одной задачкой, которая нормально...

Незадача с паттерном Цепочка обязанностей
В общем задание такое. Реализовать сказку(колобок). Естественно не через cout . И с обязательным применением цепочки обязанности. У меня...

Гостевая книга с паттерном MVC
Сделал простую гостевую книгу (Ввод имени, отзыва, сохранение и вывод данных из файла). ...

Гостевая книга с паттерном MVC
Сделал простую гостевую книгу (Ввод имени, отзыва, сохранение и вывод данных из файла). ...

Помогите с паттерном для RegExp
Есть такая строка: &lt;a class=&quot;title&quot; href=&quot;http://urlik.com/123456&quot;&gt;title 123456&lt;/a&gt; Нужно вытащить http://urlik.com/123456 и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
49
Ответ Создать тему
Новые блоги и статьи
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru