|
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
|
|||||||||||||
Разделение функционала между слоями MVVM на примере создания простого WPF приложения с БД10.02.2024, 00:12. Показов 8641. Ответов 182
Метки нет (Все метки)
Тема создана разделением темы Вывод на печать изображения MVVM
Кликните здесь для просмотра всего текста
0
|
|||||||||||||
| 10.02.2024, 00:12 | |
|
Ответы с готовыми решениями:
182
ASP.NET MVC - разделение функционала между различными view
WPF нюансы создания проводника и мелочи по MVVM |
|
|
||
| 27.02.2024, 10:41 | ||
|
0
|
||
|
|
|||||||||||
| 27.02.2024, 11:04 | |||||||||||
|
xellan24rus, Вот так Application связывает все контракты и реализации
Добавлено через 19 минут xellan24rus, А вот так идёт взаимодействие остальных объектов с контрактами
1
|
|||||||||||
|
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
|
|||||||||||||||
| 27.02.2024, 11:16 [ТС] | |||||||||||||||
|
Добавлено через 5 минут
И так как при создании
То есть реализация IRepository<Person> при данной реализации лишняя, это приведет к дублированию кода только. Вчера описывал это, почему не стал так делать. Добавлено через 1 минуту Добавлено через 2 минуты
0
|
|||||||||||||||
|
|
|
| 27.02.2024, 11:18 | |
|
0
|
|
|
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
|
|
| 27.02.2024, 11:25 [ТС] | |
|
Andrey-MSK, почитаю. Как я понял объект класса тесно связан с интерфейсом. И тогда для Vm нужно будет писать свой интерфейс. А для репозитория реализовывать другие интерфейсы если это нужно. Получается что практически всё строго завязано на интерфейсах
0
|
|
|
|
|||||||||||||||||
| 27.02.2024, 11:30 | |||||||||||||||||
0
|
|||||||||||||||||
|
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
|
|
| 27.02.2024, 11:45 [ТС] | |
|
Andrey-MSK, понял, хостирование приложения и внедрение зависимостей, не понял только как тут навигация работает, по окнам-страницам.
0
|
|
|
|
||||||||||||||||
| 27.02.2024, 14:45 | ||||||||||||||||
|
xellan24rus, Не знаю про навигацию, но вот так достаются нужные VM из сервисов
0
|
||||||||||||||||
|
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
|
||||||||||||||||||
| 28.02.2024, 17:51 [ТС] | ||||||||||||||||||
|
Элд Хасп, добрался до пк наконец то =) Постепенно разбираю реализацию. Repositories вы сильно изменили, и для вызова репозитория с командами придется передать все интерфейсы которые содержат логику, но это ладно перезагрузкой конструктора можно вызывать только не обходимое. И так как сам Repositories не содержит ничего кроме ссылки на вызов команд из DataBase, то Repositories является ссылкой, в нем нет никакой логики. И теперь Repositories не зависит от DataBase, но Repositories нельзя использовать если в проекте нету зависимости DataBase.
В моей ветке Repositories зависит от DataBase, но он реализовывал логику и нужды в App делать зависимость для DataBase не было.
И так как мой принцип с бд состоял при работе с использованием подхода Crud базовые реализации бд, во многих бд они есть, если придется менять бд, то нужно лишь сменить набор команд, то есть нет завязки на типах, нет зависимости в указание типа.
А ваша реализация с ProdustsRepository и PeopleRepository сильно зависит от типов, если придется сменить тип то скакать в дублях кода, я описывал ранее почему не сделал так, не люблю дубли кода если в них нет нужды. Добавлено через 14 минут Добавлено через 6 минут Поэтому я не понимаю, зачем делать дубли кода, ведь у вас MainModel : IRepositoriesModel имеет реализации дубликатов. А так как мы работаем с бд, а не с json, то это не оправдывает дубликаты. Но и для json можно было через рефлексию такое же в одном классе сделать, возможно даже без рефлексии получится(но это не точно) А сами репозитории зависят от контекста.
0
|
||||||||||||||||||
|
Модератор
|
||||||
| 29.02.2024, 00:33 | ||||||
|
Но это из-за того что в Модели нет БЛ, кроме работы с БД. Например, если бы это была игра, то в этой сборке была бы ещё и логика игры, а не только логика работы с Хранилищем игры. Иначе это будут сильные ссылки. "Идеальная" реализация должна оправдывать только свою идеализацию. А в таком случае Хранилищем может быть как любая БД, так и любой файл (в том числе JSON) или WEB сервер. Никакая логика (кроме App) при этом не должна меняться. А юзают его именно через интерфейс. Какой тип? Если интерфейс - то да. придётся менять коды его использующие. Если реализации интерфейса, то только код в сборке реализации. В том числе не только код. Изменение реализации приводит к необходимости перекомпиляции зависящих сборок, хотя в них нет изменения кода. А при слабых связях, такая перекомпиляция не требуется.
0
|
||||||
|
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
|
||||
| 29.02.2024, 17:09 [ТС] | ||||
|
Элд Хасп, примерно понял.
Смотрите для ослабления зависимостей то что принадлежит к бд, у вас реализовано в DataBase. Тем самым базовые реализации для работы бд лежат именно там. Если перенести в другой проект туже авторизацию, то у авторизации станет более сильная зависимость, это будет не правильно.
0
|
||||
|
|
|||||||
| 29.02.2024, 17:13 | |||||||
0
|
|||||||
|
Модератор
|
|||
| 29.02.2024, 17:35 | |||
|
Детали реализации - не важны. Проблема вашего Command<T> была в том, что он публичный.Если сделать её внутренний, а через публичную "морду" предоставлять только Command<Person> и Command<Product> - тоже было бы нормально.То есть нужно ограничить T только теми классами для которых он реализован.Добавлено через 2 минуты
0
|
|||
|
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
|
||||
| 29.02.2024, 17:50 [ТС] | ||||
|
Вышло не что такое Так как это базовые реализации, то объявил как у вас в Data Base, чтобы не было зависимости от других проектах, так как логики толком нету кроме загрузки данных, то в проекте репозитория мне создать класс с ссылкой на реализацию из Data Base и в этом же классе сделать загрузку данных. А в Vm мне остается только вызвать этот класс и все. Тогда я всё верно сделаю?
0
|
||||
|
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
|
|||
| 29.02.2024, 20:16 [ТС] | |||
|
Добавлено через 34 минуты Элд Хасп, обновил ветку на то что успел сделать пока что. Навигатор не делал особо со view. Посмотрите связи репозитория ослабил более менее или нет? Vm тоже не затронул пока что
0
|
|||
| 29.02.2024, 20:16 | |
|
Помогаю со студенческими работами здесь
120
Структура WPF приложения на MVVM
Паттерн MVVM или как писать приложения на WPF
Пример переключения между окнами WPF MVVM Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений.
. . .
|
21 мат мед. Планы на развитие модели здравоСохранения
anaschu 01.06.2026
AnyLogic: план развития симуляционной модели рабочего коллектива — динамический абсентеизм, реальные данные, три сценария сравнения
Продолжаю серию постов о дискретно-событийной модели рабочего. . .
|
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы
Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
|
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция
Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
|
|
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
|
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
|
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
|
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика
Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
|