169 похожих чатов

Парни, всем привет у меня вопрос по viewmodel, я делал чаще

всего так:
1 экран - 1 вью модель, но я тут подумал, можно же делать 1 модуль - 1 вью модель
(например, у меня есть чат, в котором есть данные пользователя, сообщения и мой баланс), можно юзать 1 вьюмодель, для всех запросов (сообщения, баланс, данные собеседника)

или можно юзать 2 вьюмодели
в 1 - получаются данные о пользователе и профиле (моем)
во 2 - сообщения

как лучше делать?
1 экран - 1 вьюемодель
или 1 вьюмодель для 1 модуля запросов?

32 ответов

13 просмотров

Вью модель - это прослойка между твоим View и Domain, связывающая их. 1 вьюмодель на несколько экранов - это нарушение принципа единой ответственности. Если у тебя на многих экранах требуются выполнять одинаковые задачи, то можно, чтобы каждая вью модель обращалась в UseCase'ам. Тогда у нее, ВМ, будет только столько функций, сколько юзкейсов ты ей предоставил

Гугл рекомендует использовать общую view model для коммуникации между активити и фрагментами.

Leonid B.
Гугл рекомендует использовать общую view model для...

Там срп в углу повесился от таких заявлений

Leonid B.
Необязательно

Почему же? Ты создаёшь мастер - класс для взаимодействия элементов, который, так или иначе, будет хранить бизнес - логику, которая не относится ко всем сегментам

Никто не заставляет делать монстра. Это может быть вм именно для коммуникации. Я не знаю, кто придумал правило 1 вью - 1 вм 🤷‍♂

Leonid B.
Никто не заставляет делать монстра. Это может быть...

Так вм хранит бизнес - логику. Тут либо несколько вм (что, в принципе, гугл в своей навигации и делает), либо одна отожранная, которая хранит инфу по нескольким экранам

Leonid B.
Никто не заставляет делать монстра. Это может быть...

Если второй и так далее вью работает ровно с тем же набором данных и по схожей логике то логично вм их обрабатывающую не разделять

Aleksandr Kulikov
Так вм хранит бизнес - логику. Тут либо несколько ...

Вм не обязана хранить всю бизнес -логику. Привет от срп.

Leonid B.
Вм не обязана хранить всю бизнес -логику. Привет о...

Не обязана, но предпроцессинг данных перед отправкой в домен/дата слой где по-твоему должен происходить?

Aleksandr Kulikov
Не обязана, но предпроцессинг данных перед отправк...

Например, в экземпляре юзкейса, который находится в вм.

Leonid B.
Например, в экземпляре юзкейса, который находится ...

Но ведь идеалистически юзкейс должен выполнять роль интерактора, но с одним методом

Aleksandr Kulikov
Но ведь идеалистически юзкейс должен выполнять рол...

мало кто знает, но «юзкейс» — это слово «функция», написанное с шестью ошибками.

Leonid B.
Юзкейс и интерактор - синонимы

Ну не совсем, интерактор может несколько функций иметь, у юзкейса же только одна - invoke

Aleksandr Kulikov
Ну не совсем, интерактор может несколько функций и...

А если юзкейс внутри вызывает другие юзкейсы, собирает их результаты и возвращает свой? Тоже запрещено? 😏

Aleksandr Kulikov
Ну не совсем, интерактор может несколько функций и...

Если в файле реального кода (без импортов и заголовков функций) одна тривиалная строка то ее можно перенести вверх или в низ )

Leonid B.
А если юзкейс внутри вызывает другие юзкейсы, соби...

Это как минимум странно, потому что я впервые слышу о том, что юзкейс может знать о других юзкейсах

Бизнес топит за ххвп. Пока мне платит бизнес, а не дядя Боб, можно некоторые практики опустить)

Некоторые собирают в одном юзкейсе несколько других и называют это научным словом интерактор. Главное, чтобы не юзкейс 😏 Хотя это синонимы.

Leonid B.
Некоторые собирают в одном юзкейсе несколько други...

Ну не, ну неправда. Назови ситуевину, когда юзкейс может собирать данные из других юзкейсов

Aleksandr Kulikov
Бизнес топит за ххвп. Пока мне платит бизнес, а не...

От оно шо! Оказывается, от догм можно отступать! Фигасе...

Leonid B.
От оно шо! Оказывается, от догм можно отступать! Ф...

Так я и не говорю, что им надо следовать. У нас тут срач ради лулзов взрослая дискуссия о гипотетически расово верных методологиях проектировани и разработки

Aleksandr Kulikov
Ну не, ну неправда. Назови ситуевину, когда юзкейс...

Юзкейс - вернуть дату дня рождения юзера Юзкейс - проверить, сегодня ли у юзера др Юзкейс - если у юзера др сегодня, то прислать подарок Ваши действия? Копипастить, потому что у вас нельзя комбинировать юзкейсы?

Leonid B.
Юзкейс - вернуть дату дня рождения юзера Юзкейс - ...

Третий не особо похож на юзкейс. Это похоже на функцию внутри вм/презентера, где дёргаются два вышеупомянутых юзкейса

Leonid B.
Юзкейсы вообще-то оч похожи на функцию

Сложно поспорить. Поэтому твое заявление о том, что функция может хранить в себе другие функции выглядит странно

Aleksandr Kulikov
Сложно поспорить. Поэтому твое заявление о том, чт...

Функция может вызывать другие функции. Это выглядит не странно, надеюсь? 😏

Может, но с позиции юзкейса это будет значить, что тебе нужно будет внутри этого класса иметь инстансы других юзкейсов. Т.е. фактически иметь функцию внутри функции

Похожие вопросы

Обсуждают сегодня

@MrMiscipitlick А можешь макрос написать, который будет вычислять смещение относительно переданных меток? Просто .label1-.label2, и вернуть значение.
КТ315
35
Подобного рода ;Следующие три строки это директивы ассемблера, ;которые можно не задавать, т.к.работаем в Visual Studio. ;Символ ";" - это начало однострочного комментария ...
Егор Анелькин
3
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
открыть папку в проводнике: 1 - ShellExecute 2 - ExecuteProcess 3 - OpenDocument что лучше выбрать?
Alexey Kulakov
12
еще вопрос, допустим мы создадим char массив из 10 элементов и присвоим ему через сканф 10 символов. и выведем все символы. Хотел спросить последний элемент /0 будет включать...
Anthem
10
Подскажите, где смотреть результат выполнения программы? Код: ;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, станда...
Егор Анелькин
5
Где в Астане можно купить мясо для шашлыков?
Dancing Іңұқәһүғө
21
;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, стандартный ;вызов процедуры ;option casemap:no...
Егор Анелькин
1
Карта сайта