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

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

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

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

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

32 ответов

24 просмотра

Вью модель - это прослойка между твоим 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
Сложно поспорить. Поэтому твое заявление о том, чт...

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

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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта