Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
1 / 1 / 0
Регистрация: 22.12.2014
Сообщений: 52

MVP как передать данные в форму

16.10.2025, 05:56. Показов 795. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я хочу передать форму данные о сотруднике, сотрудник это определенно часть модели
C#
1
2
3
4
5
6
7
8
9
10
class Employee : IEmployee
{
    public int Id { get; set; }
    public string? Name { get; set; }
    public string? Surname { get; set; }
    public string? Patronymic { get; set; }
    public string? Address { get; set; }
    public string? Department { get; set; }
    public string? About { get; set; }
}
Может ли форма знать о существовании класса Employee или интерфейса IEmployee? Может ли у модели быть такой метод для презентора?
C#
1
2
3
4
5
public partial class Employees : Form, IEmployeesView
{
    ...
    void IEmployeesView.ShowEmployee(IEmployee employee) {...}
}
Или форма категорически не должна знать о существовании Employee? Тогда презентор должен передавать в неё данные массивами строк, а форма по индексам эти массивы разбирать?
C#
1
2
3
4
5
public partial class Employees : Form, IEmployeesView
{
    ...
    void IEmployeesView.ShowEmployee(string[] employeedata) {...}
}
А если обратно от формы получать данные, то презентор будет из массивов строк собирать объекты Employee? Как-то мне вариант, где форма знает про IEmployee кажется более логичным.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.10.2025, 05:56
Ответы с готовыми решениями:

Как реализовать MVP, если UI состоит из нескольких форм?
UI представляет из себя две формы: главную и дочернюю, в которой содержатся настройки. Форма с...

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

Как реализовать интерфейс INotifyPropertyChanged в MVP паттерне?
Здравствуйте у меня есть такая XAML разметка окна <Label Width="244" Style="{StaticResource...

6
 Аватар для Andrey-MSK
3319 / 2206 / 387
Регистрация: 14.08.2018
Сообщений: 7,417
Записей в блоге: 4
16.10.2025, 08:37
Цитата Сообщение от Dr2 Посмотреть сообщение
Может ли форма знать о существовании класса Employee или интерфейса IEmployee?
Вот тут есть ответ на ваш вопрос - Что такое MVP и как это использовать
1
2282 / 1598 / 400
Регистрация: 26.06.2017
Сообщений: 4,730
Записей в блоге: 1
16.10.2025, 09:36
Если
Цитата Сообщение от Dr2 Посмотреть сообщение
сотрудник это определенно часть модели
то ответ на вопрос
Цитата Сообщение от Dr2 Посмотреть сообщение
Может ли форма знать о существовании класса Employee
нет.
Однако, в вашем примере Employee это скорее DTO, а они (DTO) обычно пронизывают весь шаблон насквозь.
1
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3399 / 2721 / 574
Регистрация: 04.09.2018
Сообщений: 8,542
Записей в блоге: 3
16.10.2025, 09:51
Цитата Сообщение от Dr2 Посмотреть сообщение
class Employees : Form
Класс сотрудника наследуется от формы? Оригинально..
0
2282 / 1598 / 400
Регистрация: 26.06.2017
Сообщений: 4,730
Записей в блоге: 1
16.10.2025, 10:28
Цитата Сообщение от wizard41 Посмотреть сообщение
Класс сотрудника наследуется от формы?
Не сотрудника, а сотрудников, т.е. форма показывающая сотрудников. В принципе не страшно и даже не оригинально, но для уменьшения путаницы можно добавить суффикс, например EmployeesView или EmployeesForm.
1
1 / 1 / 0
Регистрация: 22.12.2014
Сообщений: 52
16.10.2025, 12:39  [ТС]
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
Вот тут есть ответ на ваш вопрос - Что такое MVP и как это использовать
Здесь данные гонятся набором строк, view не знает про существование класса User. Я понимаю, что так делать можно, но вопрос скорее в том, можно ли делать по другому. Особенно, если у меня в классе с данными не одно свойство, а, условно, двадцать одно. И, например, классов с данными больше одного.
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
37
38
39
40
//View
public partial class MainWindow : Window
{
    ...
    private void LoginButton_Click(object sender, RoutedEventArgs e) //Обработчик события нажатия на кнопку входа
    {
        this.model = this.presenter.Login(LoginTextBox.Text, PassBox.Password); //Отправка данных представителю и получение обновлённой модели
        ...
    }
}
 
public class Presenter
{
    ...
    public Model Login(string login, string password) //Получение данных от вида
    {
        ...
        this.model.Login(login, password); //Обновление модели
        ...
    }
}
 
public class Model
{
    public Model()
    {
        users = new List<User>(); //Создание списка тестовых пользователей
 
        users.Add(new User("Name1","Login1","password1"));
        users.Add(new User("Name2", "Login2", "password2"));
        users.Add(new User("Name3", "Login3", "password3"));
        users.Add(new User("Name4", "Login4", "password4"));
        ...
    }
 
    public void Login(string login, string password) //Метод авторизации
    {
        ...
    }
}
Цитата Сообщение от Uswer Посмотреть сообщение
Если
Сообщение от Dr2
сотрудник это определенно часть модели
то ответ на вопрос
Я полагаю, что сотрудник должен быть частью модели. Если я делаю приложение бд сотрудников, то чем он еще может быть?

Цитата Сообщение от Uswer Посмотреть сообщение
Однако, в вашем примере Employee это скорее DTO, а они (DTO) обычно пронизывают весь шаблон насквозь.
Data Transfer Object ... не должен содержать какого-либо поведения.
То есть я могу создать класс EmployeeDTO и гонять его от бд к форме и обратно через все слои? И этот класс будет считаться не частью модели?
Если мне понадобится какое-нибудь поведение внутри этого класса, то в модели должен появиться класс Employee, а презентор должен будет уметь конвертировать EmployeeDTO <=> Employee?
0
 Аватар для Andrey-MSK
3319 / 2206 / 387
Регистрация: 14.08.2018
Сообщений: 7,417
Записей в блоге: 4
16.10.2025, 13:47
Лучший ответ Сообщение было отмечено Dr2 как решение

Решение

Цитата Сообщение от Dr2 Посмотреть сообщение
То есть я могу создать класс EmployeeDTO и гонять его от бд к форме и обратно через все слои?
Да
Цитата Сообщение от Dr2 Посмотреть сообщение
И этот класс будет считаться не частью модели?
Не будет
Цитата Сообщение от Dr2 Посмотреть сообщение
Если мне понадобится какое-нибудь поведение внутри этого класса, то в модели должен появиться класс Employee, а презентор должен будет уметь конвертировать EmployeeDTO <=> Employee?
Да

Добавлено через 1 час 3 минуты
Dr2, У меня, например, некоторые классы, которыми я гоняю данные, вот такие
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
37
38
39
40
using DTOLibrary.Base;
 
namespace DTOLibrary.DTO
{
    public sealed class KS6Detail : BaseINPC
    {
        private string _measure = string.Empty;
        private string _wname = string.Empty;
        private decimal _wquantity;
        private string _cpsFullNumber = string.Empty;
 
        public int KS6DetailID { get; set; }
        public int KS6HeaderID { get; set; }
        public int CPSHeaderID { get; set; }
        public int CPSHeaderNumber { get; set; }
        public int CPSDetailID { get; set; }
        public int CPSDetailNumber { get; set; }
        public int MeasureID { get; set; }
        public string Measure
        {
            get => _measure;
            set => Set(ref _measure, value);
        }
        public string WName
        {
            get => _wname;
            set => Set(ref _wname, value);
        }
        public decimal WQuantity
        {
            get => _wquantity;
            set => Set(ref _wquantity, value);
        }
        public string CPSFullNumber
        {
            get => _cpsFullNumber;
            set => Set(ref _cpsFullNumber, value);
        }
    }
}
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
using System.ComponentModel;
using System.Runtime.CompilerServices;
 
namespace DTOLibrary.Base
{
    public class BaseINPC : INotifyPropertyChanged
    {
        #region PropertyChangedEventHandler
 
        public event PropertyChangedEventHandler PropertyChanged;
 
        protected virtual void OnPropertyChanged([CallerMemberName] string PropertyName = null)
            => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(PropertyName));
 
        #endregion
 
        protected virtual bool Set<T>(ref T field, T value, [CallerMemberName] string PropertyName = null)
        {
            if (Equals(field, value))
                return false;
 
            field = value;
 
            OnPropertyChanged(PropertyName);
 
            return true;
        }
    }
}
Хоть они и наследуются от базового класса, но являются простыми, так как нет никакой обработки данных в них. Так что с натяжкой их можно обозвать POCO.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.10.2025, 13:47
Помогаю со студенческими работами здесь

Как реализовать паттерн MVP
Здравствуйте, пытаюсь разобраться как работает паттерн MVP и для большей наглядности пытаюсь его...

Паттерн MVP
Начал реализовывать паттерн MVP в своем приложении. У меня возник вопрос....Неужели для каждой...

Вопрос о паттерне MVP
Здравствуйте, уважаемые программисты. Порекомендуйте, пожалуйста, ссылки о MVP паттерне для Windows...

Что такое MVP ?
Всем привет! подскажите, что нужно новичку(без опыта работы) знать про MVP и как правильно...

Реализация каталогизатора с использованием MVP(xml)
Вем доброго дня! Я уже как то писал, что намериваюсь написать небольшую программу &quot;каталогизатор&quot;,...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru