|
2 / 1 / 1
Регистрация: 17.11.2020
Сообщений: 105
|
|||||||||||||||||||||
UWP Разбор MVVM подхода с использованием API и Json04.02.2022, 21:07. Показов 9497. Ответов 126
Доброго времени суток,
Как уже писал, перехожу на подход MVVM и сталкиваюсь с проблемами, шерстил форум, но не нашел подходящие решение для моего случая. Очень буду благодарен за помощь. Логика следующая, пользователей вводит номер телефона, по апи идет запрос и я получаю ответ в виде JSON, и если JSON приходит в response, то панель с смс должна появится. Если номер не правильный то приходит в error значение. Проблема вот в чем. Как мне вернуть данные из Model в ViewModel, не используя статический класс или свойство ? Да в принципе, как правильно управлять данными которые пришли в model и передать их в Viewmodel на примере JSON. View:
Так же я понимаю, что возможно здесь ошибки подхода MVVM, любые поправки с теплотой приму
0
|
|||||||||||||||||||||
| 04.02.2022, 21:07 | |
|
Ответы с готовыми решениями:
126
Создание программ с использованием структурного подхода Напишите программу (с использованием ООП подхода) |
|
Модератор
|
|
| 12.02.2022, 11:55 | |
|
Ihave, в связи с вышесказанным, просматриваю ваш репозиторий только в браузере.
Из-за этого могу многое что упустить или неверно понять. Пока такие мои замечания: 1) [JsonPropertyName("response")] в VM. Для чего служит этот атрибут? Он нужен для правильной работы с Хранилищем. А работой с Хранилищем занимается нижний уровень Модели. В VM никоим образом не должно быть такого типа атрибутов; 2) SignVM : INotifyPropertyChanged - вы же в ООП работаете! Создайте базовый класс и наследуйте от него. Собственно непосредственно к вашей VM реализация INPC не имеет никакого отношения. Главное чтобы она была, а детали её реализации неинтересны. Следовательно это функция Базового Класса. Возьмите базовый отсюда: Простые реализации для тем на форуме; 3) В Модели SignVM postData = new SignVM - серьёзно? О каком MMVM тогда можно вести речь? В MVVM очень строга иерархия: View "знает" ТОЛЬКО о VM, VM - только о Модели, а Модель самодостаточна она не должна никоим образом иметь сведения ни VM, ни о View. Не то что об их экземплярах, даже об их типе; 4) public (bool isAuthorizated, int error, HttpStatusCode StatusHttp) Authorizat - уже сколько раз вам писал, что не должна Модель возвращать данные специфичные для хранилища? Я вам убираю из публичных методов HttpStatusCode и byte[], а вы опять его пихаете туда! Ваша цель: написать "правильный MVVM" или чтобы не надоело вас исправлять? Нет ни одной причины, ни в какой задаче, ни в какой теоретически возможной ситуации, по которой HttpStatusCode (и другие специфичные для Хранилища типы) могут появиться в VM. Хранилищем (более правильно Источником Данных) занимается самый нижний слой Модели - Репозиторий. И даже в самой Модели, кроме как в Репозитории их больше нигде быть не должно. Просто у вас нет никакой Бизнес Логики и в вашей Модели ничего кроме Репозитория нет, поэтому эти типы свободно гуляют по всей Модели. Но из Модели им шагу никуда сделать нельзя! И это касается не только MVVM. Это относится к любому паттерну в котором выделена Модель: MVC, MVP и любой другой какой смогут придумать. Добавлено через 7 минут В самом простом случае, расшифровывайте HttpStatusCode в стринг с описанием ошибки. В более продвинутом варианте, можно сделать свой тип для ошибок, чтобы через App текст описания был локализован. Добавлено через 4 минуты Ihave, да - ещё раз пишу. Речь идёт о ПРАВИЛЬНОМ MVVM. На практике часто отходят от идеала. Допустим, в вашем случае, вам не нужна абстракция от Хранилища, поскольку вы строите, по сути, GUI для работы с WEB сервером. Но в правильном ОПП нужно обязательно АБСТРАГИРОВАТЬСЯ от Хранилища. О типе Хранилища могут знать только Модель (если в ней нет выделенного Репозитория) и App. Добавлено через 4 минуты На практике, для вашего приложения, 4 пункт можно "срезать" - можно возвращать HttpStatusCode и выводить по нему заранее заготовленной сообщение. Но в ИДЕАЛЬНОМ MVVM (MVC, MVP) такого быть не должно.
0
|
|
|
2 / 1 / 1
Регистрация: 17.11.2020
Сообщений: 105
|
|||||||||||||||||||||
| 12.02.2022, 17:44 [ТС] | |||||||||||||||||||||
|
Элд Хасп, Хочу сразу поблагодарить вас ещё раз за помощь и за то что "няньчитесь" со мной.
Так же у меня к вам вопрос, в APP у меня
Я могу некоторые параметры сразу установить так в Модели. Но изменяемые данные типо Hwid, собираются. И как мне передать их из APP когда там пройдет процедура сбора данных.
0
|
|||||||||||||||||||||
|
Модератор
|
|||||
| 12.02.2022, 18:14 | |||||
|
Для этого на уровне Модели создайте отдельный класс для сериализации JSON. VM это ни каким боком не касается. Добавлено через 56 секунд Добавлено через 5 минут Ihave, папка .vs осталась в репозитории.Не заходя в Студию, в браузере удалите её. И скиньте мне приглашение на EldHasp. Аватарка такая же как здесь на Форуме. Добавлено через 3 минуты 1) Добавьте в Решение Новый Проект "Model" типа "Библиотека классов"; 2) В этом проекте не должно быть никаких ссылок на другие проекты в этом Решении; 3) Перенесите ваш класс SignM в это проект; 4) И после этого завершите реализацию этой Модели.
0
|
|||||
|
2 / 1 / 1
Регистрация: 17.11.2020
Сообщений: 105
|
|||
| 12.02.2022, 18:15 [ТС] | |||
|
0
|
|||
|
Модератор
|
||
| 12.02.2022, 18:24 | ||
|
Клонируется, собирается нормально, лишних файлов не появляется. Я сейчас вам слегка подравняю структуру Репозитория. А потом вы продолжите.
0
|
||
|
2 / 1 / 1
Регистрация: 17.11.2020
Сообщений: 105
|
||
| 12.02.2022, 18:29 [ТС] | ||
|
0
|
||
|
2 / 1 / 1
Регистрация: 17.11.2020
Сообщений: 105
|
|||
| 12.02.2022, 18:38 [ТС] | |||
|
0
|
|||
|
Модератор
|
|||
| 12.02.2022, 18:44 | |||
|
Он на грани того, что его через год-два официально похоронить могут. На Desktop не выдерживает конкуренцию с WPF Core. Перспективы для многоплатформенности у Core тоже лучше. В настоящее время на этом поприще его значительно обходят Xamarin, Avalonia и т.п. В этих пакетах или уже есть поддержка WPF Core, или продекларировано, что будет в ближайшее время. Фактически он живой только из-за магазина MS в котором только UWP приложения разрешены. В UWP есть ОЧЕНЬ много своих косяков, которые резко усложняют реализацию в сравнении с WPF. Добавлено через 36 секунд
0
|
|||
|
2 / 1 / 1
Регистрация: 17.11.2020
Сообщений: 105
|
|||
| 12.02.2022, 18:59 [ТС] | |||
|
https://github.com/Odaronil/MVVM.git Я отправил вам так же приглашение. Программа опубликована в магазине уже, поэтому тут уже выбрать другое не получается и еще сразу компиляция на ARM и тд, не знаю есть ли это так же в WPF.
0
|
|||
|
2 / 1 / 1
Регистрация: 17.11.2020
Сообщений: 105
|
|||
| 12.02.2022, 19:18 [ТС] | |||
|
Добавлено через 1 минуту опубликованием в магазине и компиляция под процы.
0
|
|||
|
Модератор
|
|||
| 12.02.2022, 20:00 | |||
|
Ihave, структуру создал.
Вроде понятно должно быть. Синхронизируйте и посмотрите. Такое ощущение, что начали делать и на полдороге бросили. Три года назад MS ещё активно продвигало UWP, на всех углах трендели, что это приемник WPF. Хотели стать аналогом Apple с их магазином. А по факту у них ничего не вышло. Окончательно сдались в конце 20г. Тогда выпустил WPF Core (сейчас уже просто WPF), завершили развитие Framework, стали активно развивать Core и WPF. Об UWP, вообще, после этого перестали говорить.
0
|
|||
|
2 / 1 / 1
Регистрация: 17.11.2020
Сообщений: 105
|
|||||||||||||||||
| 12.02.2022, 20:27 [ТС] | |||||||||||||||||
|
Посмотрел, вопросики.
2) Вопрос с переносом еще остался пост 42 - как мне передать эти значения в модель из APP Правильно... Чтобы избавиться от localSettings. 3) Если передаваемых данных в модель более двух трех и тд Я создам мутабельный DTO в модели и буду его собирать в VM уже ? Пример: VM
В тысячный раз спасибо за помощь и дополнением еще стандартными классами...
0
|
|||||||||||||||||
|
Модератор
|
||||
| 12.02.2022, 21:03 | ||||
|
Но общая концепция такая: ViewModel - это прокси отражающий Модель в своих свойствах. Больше ничего в VM быть не должно. Есть у вас контролл в Модели? Нет и быть его там не может. Значит и VM не может отразить несуществующий котролл. Добавлено через 26 секунд Добавлено через 2 минуты App их может передать или напрямую в Модель, или через VM? если эти данные в VM тоже нужны. Сейчас пока давайте Модель закончим. А уже дальше будем думать как и что. Добавлено через 5 минут На текущем этапе посмотри саму структур, если что нужно и можешь подправь. Как зафиксируетесь - посмотрю и продолжим дальше.
0
|
||||
|
2 / 1 / 1
Регистрация: 17.11.2020
Сообщений: 105
|
|||||
| 12.02.2022, 22:04 [ТС] | |||||
![]() Вопрос: CommonUWP для чего он обычно будет использоваться ?
0
|
|||||
|
Модератор
|
||||||||||||||||||
| 12.02.2022, 22:59 | ||||||||||||||||||
|
CommonStandart - больше расширяться не будет. В него записываются только те классы реализация которых не зависит от целевой платформы. Для данных, которые нужны от них, я добавлю интерфейс. А в Модель конструктор:
Но возникает проблема с этой строчкой:
Фиксацию сделал - посмотрите. Добавлено через 5 минут И параметров у метода Authorizat уже многовато 2 входных, три выходных. Я бы сделал уже какой-то DTO. Не даже не так. Я бы для ошибки сделал отдельный канал - событие. Но События сейчас совсем вас запутают. Поэтому для 5 параметров, навеноне, компактнее и понятнее будет void метод и один DTO в его параметре.
0
|
||||||||||||||||||
|
2 / 1 / 1
Регистрация: 17.11.2020
Сообщений: 105
|
||||||||
| 12.02.2022, 23:14 [ТС] | ||||||||
Connect используется по сути один раз с заголовками ключ и все, но потом когда надо будет постоянно общаться с сервером нужно в заголовок отправлять токен девайс и айди. Создать для этого другую модель типо connect ? Или как это можно обыграть ? У меня проблема с CommonStandart - говорит что не поддерживает null в С# 7.3 используйте версию языка 8.0 или выше
0
|
||||||||
|
Модератор
|
||||
| 12.02.2022, 23:27 | ||||
|
За пределами SignM этот токен где-то используется? Если нет, то в нужно для него в Модели сделать приватное поле. Если да, то в интерфейсе настроек добавить мутабельное свойство. Добавьте пару других методов, чтобы я понял что у них общее. В более общем, обычно на уровне Модели делается библиотека и общие типы (в том числе интерфейс Модели) объявляются там. А в проекте Модели только реализация её интерфейса и интернал типы.
0
|
||||
|
2 / 1 / 1
Регистрация: 17.11.2020
Сообщений: 105
|
||||
| 12.02.2022, 23:32 [ТС] | ||||
|
0
|
||||
| 12.02.2022, 23:32 | |
|
Разбор JSON, используя Newtonsoft.Json Моделирование работы РЛС с использованием объектно-ориентированного подхода Использованием навигационного подхода без применения SQL запросов Моделирование работы РЛС с использованием объектно-ориентированного подхода Парсинг json ответа api vk. Вложенность Json Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
|
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
|
День 5 из 28: Codex подсказывает следующий запрос
and_y87 12.10.2026
9 октября 2026 года OpenAI запустила бету Composer predictions — подсказок следующего сообщения в текущем диалоге Codex. Это помощь с формулировкой запроса, а не автоматическое продолжение задачи.
. . .
|
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет!
За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
|
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|