|
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
|
|||||||||||||
Разделение функционала между слоями MVVM на примере создания простого WPF приложения с БД10.02.2024, 00:12. Показов 8842. Ответов 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 | |
|
Структура WPF приложения на MVVM
Паттерн MVVM или как писать приложения на WPF
Пример переключения между окнами WPF MVVM Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
|
|
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701
Купил два термопринтера QR701.
На сэлф-тесте написано:
Language: PC936 (GB18030).
Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
|
Создание формы заимствованного документа
Maks 03.08.2026
Задача:
Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также
табличная часть со следующими реквизитами:
- Расчетный счет покупателя. . .
|
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача:
В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
|
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов.
Логика кажется понятной:
1. Находим ключевые слова.
2. Добавляем их на. . .
|