1 / 1 / 0
Регистрация: 10.10.2021
Сообщений: 57
|
||||||||||||||||
1 | ||||||||||||||||
Разбираюсь с паттерном MVP04.07.2023, 11:10. Показов 2550. Ответов 48
Метки нет (Все метки)
Доброго времени, всем!
MVP Правильно ли я уловил суть? Model Кликните здесь для просмотра всего текста
View Кликните здесь для просмотра всего текста
Presenter Кликните здесь для просмотра всего текста
Что лучше использовать в моём случае для Model, View - Класс, Абстрактный класс, Интэрфейс или др.? Спасибо!
0
|
04.07.2023, 11:10 | |
Ответы с готовыми решениями:
48
Как рисовать на форме? Пользуюсь MVP паттерном Разобраться с паттерном Decorator Регулярные выражения с переменным паттерном Не могу разобраться с паттерном Стратегия Незадача с паттерном Цепочка обязанностей |
04.07.2023, 22:26 | 2 |
Ну.. почти. Можно сказать что уловил. Однако в презентере не нужно каждый раз создавать новый View (в пределах одного приложения).
Добавлено через 2 минуты Классы сойдут. Абстрактный класс - в твоем случае не очень подходит. Интерфейс можно применить, в качестве контракта для презентера... Но тоже не особо нужен в данном случае.
0
|
1 / 1 / 0
Регистрация: 10.10.2021
Сообщений: 57
|
||||||
05.07.2023, 04:14 [ТС] | 3 | |||||
wizard41, понятно. изменил Presenter
Кликните здесь для просмотра всего текста
Спасибо!
0
|
1 / 1 / 0
Регистрация: 10.10.2021
Сообщений: 57
|
|
05.07.2023, 18:45 [ТС] | 5 |
что имеете в виду под "сущности... должны быть моделированы"?
в "базе" (List<>) будут лежать массивы строк. не совсем понял куда клоните... Спасибо!
0
|
Модератор
|
|||||||||||
05.07.2023, 21:08 | 6 | ||||||||||
Не путайте устаревший термин "Модель" из старого ADO, с термином "Модель" из семейства паттернов
MV* ."Модель ADO" - служит для парсинга SQL запросов. Даже в ЕF подобные типы называются уже "Сущность". "Модель в паттерне" - это СЛОЙ приложения в котором находится вся Бизнес (Доменная) Логика. Состоять Модель может из очень многих других объектов. Часто Модель разбивается ещё на подслои. Одним из таких подслоёв нижнего уровня может быть Репозиторий. В задачах где кроме "общения" с БД нет другой БЛ, по сути вся Модель состоит из одного только Репозитория. В упрощённом общении часто под Моделью понимают не весь слой, а только "морду", интерфейс этого слоя через который с Моделью "общаются" её потребители. Добавлено через 12 минут Вложенные публичные типы "не есть хорошо". Вынесите объявление делегата в пространство имён. Модель должна контролировать своё состояние и извещать об его изменении. А как в такой реализации она сможет узнать об изменении списка? Нужно так:
dataList .Это не будет работать без переопределения метода сравнения. Попробуйте:
1
|
1 / 1 / 0
Регистрация: 10.10.2021
Сообщений: 57
|
|||||||||||
06.07.2023, 06:18 [ТС] | 7 | ||||||||||
я думал над этим. искал в List<> событие для отслеживания. поискал в глобе.
ничего лучше кроме ObservableCollection<T>.CollectionChanged не нашёл. решил реализовать через событие, описанное в Model
0
|
Модератор
|
|
06.07.2023, 11:09 | 8 |
Есть два основных типа коллекций, позволяющих отслеживание изменений:
1) INotifyCollectionChanged - называют "Наблюдаемая коллекция"; 2) IBindingList - "Привязываемый список". ObservableCollection - это самая простая реализация INCC. Для WPF является основным типом мутабельной коллекции.В Формах в основном используется BindingList . WPF тоже может его использовать, но ObservableCollection всё же проще.List<> - это реализация IList<> "Простой индексированный список". Его реализует и T[], и многие другие коллекции. Но вот уведомления об изменении в нём не предусмотренно.Чаще всего этот подход и будет самым верным. Использование в свойствах Модели коллекции за состоянием которой нужно следить - это довольно громоздко и сложно. Из реально используемых таких решений "на ум" приходит только Local.ToObservableCollection() из Контекста БД в EF.Добавлено через 1 минуту Поняли почему?
0
|
1 / 1 / 0
Регистрация: 10.10.2021
Сообщений: 57
|
||||||||||||||||
01.08.2023, 12:06 [ТС] | 9 | |||||||||||||||
наконец-то, "дошли руки" продолжить обучение...
всё-таки бывает работа отнимает много времени и сил Model Кликните здесь для просмотра всего текста
View Кликните здесь для просмотра всего текста
Presenter Кликните здесь для просмотра всего текста
Соответствующий вывод Кликните здесь для просмотра всего текста
Произошло добавление элемента в базу данных!
Произошло изменение элемента в базе данных! Произошло добавление элемента в базу данных! Произошло удаление элемента из базы данных!
0
|
01.08.2023, 12:21 | 10 |
Как-то странно. Вообще-то в слое приложения должен быть View, а не Presenter...
Model - библиотека NET Presenter - библиотека NET View - приложение (Console, WF, WPF, Avalonia и т.д.)
0
|
1 / 1 / 0
Регистрация: 10.10.2021
Сообщений: 57
|
||||||||||||||||
01.08.2023, 18:02 [ТС] | 11 | |||||||||||||||
что то типа этого? Model Кликните здесь для просмотра всего текста
View Кликните здесь для просмотра всего текста
Presenter Кликните здесь для просмотра всего текста
если нет, то можно Ваш вариант, для понимания?
0
|
02.08.2023, 08:23 | 12 |
zaka4kin,
Паттерн MVP Особенности реализации MVP для Windows Forms Добавлено через 1 минуту zaka4kin, И тут на форуме есть пример - Создание программы - ООП модель, MVP
0
|
3466 / 2476 / 696
Регистрация: 02.08.2011
Сообщений: 6,720
|
|
02.08.2023, 09:15 | 14 |
Обычно в таком случае ищут дополнительные источники, выясняя правду.
Например, 1. MVP - Wiki 2. MVP - UI Design pattern - MSDN 3. Fowler - UI Architectures
0
|
02.08.2023, 09:27 | 15 |
zaka4kin, Вызывайте методы Presenter в консоли, кто вам не даёт...
Вы скорее всего не поняли сам смысл паттернов MV*. Они созданы для разделения логических частей приложения, которое упрощает разработку больших приложений в команде. Одни занимаются Model, вторые View, третие Presenter (ViewModel, Controller). И все эти группы людей практически не знают что делают другие, они видят только интерфейсы этих слоёв и работают с ними. Распределение связей в этих паттернах такое 1. Model - сборка сама в себе, о существовании других вообще не догадывается. 2. Presenter (ViewModel, Controller) - имеет связь с Model, точнее с тем что выдано по интерфейсу в публичный доступ. 3. View - знает только о пункте 2. Пункт 1 для него не доступен на прямую. 4. Application - знает о всех слоях и задаёт взаимодействие между ними, запуская нужные сервисы для обслуживания потребностей.
1
|
Модератор
|
|
02.08.2023, 12:38 | 16 |
Andrey-MSK, не так. Вы описали за связи в паттерне MVVM. Это строго иерархический паттерн.
Например, в MVC View знает и о контролере, и о модели. Добавлено через 2 минуты В MVP Презентер дёргает View.
1
|
Модератор
|
|
02.08.2023, 13:36 | 18 |
Класс Program - это точка запуска приложения и уровень приложения. Этот уровень не относится ни к одному из слоёв паттернов
MV* . Здесь обычно происходит создание слоёв, их объектов, внедрение зависимостей.Чтобы не было путаницы, лучше делать все слои MV* в отдельных от App проектах. К сожалению, настройки проектов для платформ GUI делают затруднительным создание View отдельно от App. Особенно для WPF. Поэтому в приложениях с GUI чаще всего App совмещён в одном проекте с View.Совмещать App с Моделью и с VM-Controller-Presenter не имеет смысла ни при каких обстоятельствах.
0
|
1 / 1 / 0
Регистрация: 10.10.2021
Сообщений: 57
|
|
02.08.2023, 13:59 [ТС] | 19 |
Элд Хасп, какой из примеров, был наиболее близок к MVP в контексте Console ?
0
|
Модератор
|
|
02.08.2023, 18:28 | 20 |
Ох, блин....
В общем смысле - любой паттерн подходит. Консоль - это тип View. Во всех паттернах тип View может быть любым. Другое дело - это вопрос о более частом применении паттерна для того или иного типа View. MVC - исторически это первый паттерн. И, соответственно, примеров его применения для консоли гораздо больше. Потом появились Формы и появилась потребность как-то адаптировать MVC для более удобного использования в приложениях с GUI. Появился MVP. MVVM появился уже как адаптация к WPF. Но даже его можно с успехом использовать в консоли. Для консольного MVP я бы всё равно сделал View (консоль) в проекте с приложением. Там же сделал бы и рантайм сборку приложения - создание и связывание всех слоёв. Но сам класс View должен быть отделён от Program. Модель и Presenter - в отдельных проектах типа "Библиотека классов Standard".
0
|
02.08.2023, 18:28 | |
02.08.2023, 18:28 | |
Помогаю со студенческими работами здесь
20
Гостевая книга с паттерном MVC Гостевая книга с паттерном MVC Помогите с паттерном для RegExp WPF приложение с паттерном MVVM Является ли срока паттерном RegEx? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |