|
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
|
|||||||||||||
Разделение функционала между слоями MVVM на примере создания простого WPF приложения с БД10.02.2024, 00:12. Показов 8863. Ответов 182
Метки нет (Все метки)
Тема создана разделением темы Вывод на печать изображения MVVM
Кликните здесь для просмотра всего текста
0
|
|||||||||||||
| 10.02.2024, 00:12 | |
|
Ответы с готовыми решениями:
182
ASP.NET MVC - разделение функционала между различными view
WPF нюансы создания проводника и мелочи по MVVM |
|
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
|
|||
| 11.02.2024, 13:40 [ТС] | |||
|
И интерфейс у меня хранится в отдельной либе.
0
|
|||
|
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
|
|||||||||||
| 11.02.2024, 17:16 [ТС] | |||||||||||
|
Элд Хасп, я почти разобрался. реализую в своей ветке такой же функционал.
Типа такого
0
|
|||||||||||
|
Модератор
|
||
| 11.02.2024, 17:53 | ||
|
В консольном приложении код (кроме фрагмента с созданием экземпляра Модели) относится к функционалу View. Поэтому и сделал сохранение в переменной типа интерфейса, а не класса.
0
|
||
|
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
|
|
| 11.02.2024, 17:57 [ТС] | |
|
Элд Хасп, понял, информативно в целях примера) Пока не реализовал подобное в своей ветке, чтобы вникнуть полностью. Но демонстрация хороша. Одна реализация интерфейсов и классов. Но правки кода в одном месте доступны для всех потребителей
0
|
|
|
Модератор
|
|||
| 11.02.2024, 18:15 | |||
|
А то ваш CreatePeople() прямо "глаза режет".Что касается именований. Пример - ApplicationContext.Что это означает? Контекст приложения. А откуда у этого контекста знание, что он будет использован как единственный контекст приложения? Нету у него такого знания. Это маленький пример того, что вы мыслите "от View". Отсюда у вас и классы CommandPeople, CommandUser. Чем они командует? Ничем. Я поэтому и не хотел торопиться с созданием WPF вьюхи. Чтобы вы "прочувствовали", что всё вертится вокруг Модели, а не GUI. Вот у вас явно в GUI прослеживается наличие состояния "Есть Авторизация". Представление этого состояния есть, но самого состояния в Модели нет! Так что тогда это Представление представляет? По большому счёту "фигню какую-то".... ![]() Давайте сейчас обсуди Бизнес Логику модели. Потом реализуем её. И только после этого будем думать как эту Модель представлять. Пока я вижу только три таблицы в БД без связей друг с другом. Объясните назначение каждой. Добавлено через 9 минут 1) Как сущности для парсинга EF запросов, но здесь нужна обязательно правильная настройка схемы БД, а то эффективность будет низка; 2) Как Бизнес Сущности в Модели; 3) Как DTO для передачи данных между Моделью и ViewModel; 4) Как сущность для связывания ViewModel и View; 5) Как прокси для контекста редактированья в View. В простых приложения такое часто бывает. Но если нужна безопасность (например в корпоративной, коллективной разработке), то в каждом функционале следует использовать свою реализацию предназначенную только для этого. Это даже не рекомvендация WPF и Шарпа, это общий принцип ООП SOLID "Принцип единственной ответсвенности".
0
|
|||
|
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
|
||||||
| 11.02.2024, 18:25 [ТС] | ||||||
|
Вторая страница - Vm готова, осталось только во View подгрузить всё. Можно вывести в ListBox и добавить поля текстовые для редактирования выбранного элемента в ListBox, помимо этого добавление удаление объектов. В плане работы с данными думаю достаточно будет, ибо всё будет однотипно и это уже не задачкой, а решением будет, лишняя работа для примера. Также страницу с переключением темы и языка можно сделать. В качестве полноценного примера реализации простого приложения пойдёт, ведь есть навигация, работа с данными, локализация, смена тем. Для примера мне и тем кто будет читать тему или разбираться в исходнике, в ознакомительных целях, хороший вариант. А что ещё добавить можно было, даже не знаю. Вы не смотрели ещё навигацию по страницам? В плане без переноса NavigationVm в основной проект можно сделать хранение состояний страниц. Или же проще Перенсти навигацию в основу, а дочерние Vm дергать из библиотеки. Если только сделать модель со списком сотрудников, компаний, задач, статистикой и т.п и в разных страницах обрабатывать что то нужное. Но это опять сводится с DataGrid и пример выйдет тогда больше чем нужно, наверное.
0
|
||||||
|
Модератор
|
||
| 11.02.2024, 18:31 | ||
|
xellan24rus, и н могу врубиться в логику приложения.
User - People - чем они отличаются? Можете детальнее объяснить логику которую должно реализовать приложение? Добавлено через 3 минуты Например вот эти: Правила именования. Поэтому базу надо назвать согласно ей предметной области. Что и для чего она хранит? Вот так и назовите.
0
|
||
|
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
|
|||
| 11.02.2024, 18:32 [ТС] | |||
|
Или я не том понял.
0
|
|||
|
Модератор
|
||
| 11.02.2024, 18:33 | ||
|
Вот её напрочь не пойму. Любое имя добавляется в БД. Зачем-то устанавливается влаг "авторизирован", но нигде он не проверяется. Кто такие "Person"? если они не "User"?
0
|
||
|
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
|
||||||
| 11.02.2024, 18:40 [ТС] | ||||||
|
2 Вывод информации о людях, только вывод. 3 вывод продуктов\описание, функционал: редактирование, удаление, добавление. 4 настройки: локализации, смена темы. Добавлено через 2 минуты
0
|
||||||
|
Модератор
|
|||
| 11.02.2024, 19:27 | |||
|
Например, сейчас DTO используются как сущности. Группа Беккенд разработки наворотила кучу своей логики на уровне Модель, Репозитория, БД: связи между сущностями, валидация значений и др. Вся логика рассчитана на то, что изменение свойств DTO происходит происходит только в Модели. Но эти же DTO использует и группа фронт разработки. Для них это обычный мутабельный DTO. И если понадобилось где-то изменить значение какого-то свойства - взяли и изменили. А про то, что это может нарушить какую-то логику на уровне Модели они "знать не знают", да, и не должны знать. Добавлено через 6 минут Как она связана с БД?
0
|
|||
|
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
|
||||
| 11.02.2024, 20:12 [ТС] | ||||
|
0
|
||||
|
Модератор
|
||||
| 11.02.2024, 20:19 | ||||
|
Добавлено через 2 минуты Тогда получается, сохранение нового имени. И после этого считать что авторизованный вход произошёл. Будем делать это как изменение состояния Модели? Тогда нужно в Модель добавить метод авторизации, свойство возвращающее состояние авторизации, и событие об изменении свойства авторизации. Добавлено через 3 минуты Использование мутабельных ссылочных типов в качестве DTO для обмена между несвязанными (разработкой) типами создаёт риски "нечаянно что-то поломать". Поэтому для DTO лучше использовать либо значимые типы, либо иммутабельные DTO.
0
|
||||
|
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
|
||||
| 11.02.2024, 21:26 [ТС] | ||||
|
Добавлено через 1 минуту Да и бд какие то поддерживают значения для сущностей null, то есть если не нужно, то с этим можно не работать.
0
|
||||
|
Модератор
|
|||
| 11.02.2024, 23:06 | |||
|
И таблица в БД будет всего из одной строки. Верно? Вообще, надо понимать, что основные плюсы ООП получают коллективы разработчиков приложений с длительным сроком поддержки и постоянной модернизацией. Разработчик одиночка небольшого приложения которое нужно отдать заказчику и забыть про него, скорее всего олт идеального следования ООП только дополнительную работу сам себе создаст. Но в данном случае, у нас учебный пример. Поэтому будем на нём изучать разные способы реализации и по возможности с наименьшими нарушениями ООП. Это позволит вам потом осознано принимать решения где нужно "сделать по феншую", а где можно "срезать углы".
0
|
|||
|
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
|
||
| 11.02.2024, 23:16 [ТС] | ||
|
Элд Хасп, в рамках командной работы и одиночной большая разница. Но скорее всего важный фактор несет масштабность проекта. Ведь в малом проекте где будет 10 классов, дробить логику и т.п. Будет лишней работой, особенно если это заказ про который забудешь. А другое дело более большой проект с обслуживанием, обновлением. Тут уже уже лучше соблюдать архитектуру, ведь от нее будет зависеть насколько легко будет обслуживание. Достаточно будет исправить один метод или десяток к примеру. В целом архитектуру можно сравнивать со стилями. Можно писать в каждом свойстве значение, а можно создать ресурс и использовать в рамках даже не одного приложения.
0
|
||
|
Модератор
|
|||
| 11.02.2024, 23:46 | |||
|
xellan24rus, добавил авторизацию в Модель
Добавлено через 1 минуту Добавлено через 1 минуту Поэтому нужно изучать как сделать "правильно". Хотя это и более объёмно.
0
|
|||
|
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
|
|||
| 11.02.2024, 23:51 [ТС] | |||
|
Если постоянно делать мелкие\средние проекты то хватит декомпозиции. А если проект без обновлений, то зависит уже
Видел и полностью синхронные решения в многопоточной работе Task... Поэтому соглашусь, осознанный выбор лучшее решение)
1
|
|||
|
Модератор
|
|
| 12.02.2024, 08:10 | |
|
0
|
|
| 12.02.2024, 08:10 | |
|
Структура WPF приложения на MVVM
Паттерн MVVM или как писать приложения на WPF
Пример переключения между окнами WPF MVVM Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|
|
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать
Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|