mastodon.world is one of the many independent Mastodon servers you can use to participate in the fediverse.
Generic Mastodon server for anyone to use.

Server stats:

9.4K
active users

#viewmodel

0 posts0 participants0 posts today
AndroidCrash course on the Android UI layer | Part 1 Crash Course on the Android UI Layer | Part&nbsp;1 The ...<br><br><a href="https://medium.com/bumble-tech/crash-course-on-the-android-ui-layer-part-1-2094221a9be3?source=rss----6353b5325b1a---4" rel="nofollow noopener noreferrer" target="_blank">https://medium.com/bumble-tech/crash-course-on-the-android-ui-layer-part-1-2094221a9be3?source=rss----6353b5325b1a---4</a><br><br><a rel="nofollow noopener noreferrer" class="mention hashtag" href="https://mastodon.social/tags/viewmodel" target="_blank">#viewmodel</a> <a rel="nofollow noopener noreferrer" class="mention hashtag" href="https://mastodon.social/tags/ui" target="_blank">#ui</a> <a rel="nofollow noopener noreferrer" class="mention hashtag" href="https://mastodon.social/tags/android" target="_blank">#android</a> <a rel="nofollow noopener noreferrer" class="mention hashtag" href="https://mastodon.social/tags/architecture" target="_blank">#architecture</a> <a rel="nofollow noopener noreferrer" class="mention hashtag" href="https://mastodon.social/tags/state-management" target="_blank">#state-management</a><br><br><a href="https://awakari.com/pub-msg.html?id=EEJk7oKpiPHIBcKEvZH7YKLhcjA" rel="nofollow noopener noreferrer" target="_blank">Event Attributes</a>
AndroidCrash course on the Android UI layer | Part 2 Crash Course on the Android UI Layer | Part&nbsp;2 Stat...<br><br><a href="https://medium.com/bumble-tech/crash-course-on-the-android-ui-layer-part-2-2335171467e0?source=rss----6353b5325b1a---4" rel="nofollow noopener noreferrer" target="_blank">https://medium.com/bumble-tech/crash-course-on-the-android-ui-layer-part-2-2335171467e0?source=rss----6353b5325b1a---4</a><br><br><a rel="nofollow noopener noreferrer" class="mention hashtag" href="https://mastodon.social/tags/android-app-development" target="_blank">#android-app-development</a> <a rel="nofollow noopener noreferrer" class="mention hashtag" href="https://mastodon.social/tags/viewmodel" target="_blank">#viewmodel</a> <a rel="nofollow noopener noreferrer" class="mention hashtag" href="https://mastodon.social/tags/architecture" target="_blank">#architecture</a> <a rel="nofollow noopener noreferrer" class="mention hashtag" href="https://mastodon.social/tags/android" target="_blank">#android</a> <a rel="nofollow noopener noreferrer" class="mention hashtag" href="https://mastodon.social/tags/ui" target="_blank">#ui</a><br><br><a href="https://awakari.com/pub-msg.html?id=WkqlbKzSG2McXZDGdXKxuksm7Hc" rel="nofollow noopener noreferrer" target="_blank">Event Attributes</a>
AndroidUnit Testing Lifecycle and State in ViewModels Lifecycle 2.9.0-alpha01 introduced ViewModelScenar...<br><br><a href="https://medium.com/androiddevelopers/unit-testing-lifecycle-and-state-in-viewmodels-9d406c08cbd7?source=rss----95b274b437c2---4" rel="nofollow noopener noreferrer" target="_blank">https://medium.com/androiddevelopers/unit-testing-lifecycle-and-state-in-viewmodels-9d406c08cbd7?source=rss----95b274b437c2---4</a><br><br><a rel="nofollow noopener noreferrer" class="mention hashtag" href="https://mastodon.social/tags/testing" target="_blank">#testing</a> <a rel="nofollow noopener noreferrer" class="mention hashtag" href="https://mastodon.social/tags/viewmodel" target="_blank">#viewmodel</a> <a rel="nofollow noopener noreferrer" class="mention hashtag" href="https://mastodon.social/tags/android" target="_blank">#android</a> <a rel="nofollow noopener noreferrer" class="mention hashtag" href="https://mastodon.social/tags/kotlin" target="_blank">#kotlin</a><br><br><a href="https://awakari.com/pub-msg.html?id=HXiT7y2ArANeCo4tahIeNuoJB2G" rel="nofollow noopener noreferrer" target="_blank">Event Attributes</a>
AndroidViewModel Internal Working The ViewModel is a core component of Android Architecture Components, ...<br><br><a href="https://proandroiddev.com/viewmodel-working-c6684da19496?source=rss----c72404660798---4" rel="nofollow noopener noreferrer" target="_blank">https://proandroiddev.com/viewmodel-working-c6684da19496?source=rss----c72404660798---4</a><br><br><a rel="nofollow noopener noreferrer" class="mention hashtag" href="https://mastodon.social/tags/architecture" target="_blank">#architecture</a> <a rel="nofollow noopener noreferrer" class="mention hashtag" href="https://mastodon.social/tags/kotlin" target="_blank">#kotlin</a> <a rel="nofollow noopener noreferrer" class="mention hashtag" href="https://mastodon.social/tags/viewmodel" target="_blank">#viewmodel</a> <a rel="nofollow noopener noreferrer" class="mention hashtag" href="https://mastodon.social/tags/android" target="_blank">#android</a> <a rel="nofollow noopener noreferrer" class="mention hashtag" href="https://mastodon.social/tags/mvvm" target="_blank">#mvvm</a><br><br><a href="https://awakari.com/pub-msg.html?id=O9K0c9iQqFdJ05qeRPG1skznVWy" rel="nofollow noopener noreferrer" target="_blank">Event Attributes</a>
Habr<p>Безопасное обновления состояния в ViewModel</p><p>Это краткая заметка о подходе, который я выработал для себя, чтобы обновлять состояние экрана при использовании MVI-like паттерна в ViewModel . Сразу оговорюсь, что классический "полноценный" MVI подразумевает использование редьюсеров, которые решают часть проблем, описанных в этой заметке, но сугубо на мой вкус, этот подход заставляет писать много бойлерплейтного кода.</p><p><a href="https://habr.com/ru/articles/880108/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">habr.com/ru/articles/880108/</span><span class="invisible"></span></a></p><p><a href="https://zhub.link/tags/viewmodel" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>viewmodel</span></a> <a href="https://zhub.link/tags/kotlin" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>kotlin</span></a> <a href="https://zhub.link/tags/arrow" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>arrow</span></a> <a href="https://zhub.link/tags/mvi" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>mvi</span></a></p>
Androidunresolved reference uiState = uiState.copy from a data class I have a data class in my models li...<br><br><a href="https://stackoverflow.com/questions/79362627/unresolved-reference-uistate-uistate-copy-from-a-data-class" rel="nofollow noopener noreferrer" target="_blank">https://stackoverflow.com/questions/79362627/unresolved-reference-uistate-uistate-copy-from-a-data-class</a><br><br><a rel="nofollow noopener noreferrer" class="mention hashtag" href="https://mastodon.social/tags/android" target="_blank">#android</a> <a rel="nofollow noopener noreferrer" class="mention hashtag" href="https://mastodon.social/tags/kotlin" target="_blank">#kotlin</a> <a rel="nofollow noopener noreferrer" class="mention hashtag" href="https://mastodon.social/tags/viewmodel" target="_blank">#viewmodel</a> <a rel="nofollow noopener noreferrer" class="mention hashtag" href="https://mastodon.social/tags/kotlin-coroutines" target="_blank">#kotlin-coroutines</a><br><br><a href="https://awakari.com/pub-msg.html?id=AJQQt3jgyxK5FOwZSDVldLzTRXE" rel="nofollow noopener noreferrer" target="_blank">Event Attributes</a>
AndroidУправление настройками с помощью Jetpack DataStore: Простой ...<br><br><a href="https://habr.com/ru/articles/874034/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=874034" rel="nofollow noopener noreferrer" target="_blank">https://habr.com/ru/articles/874034/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=874034</a><br><br><a rel="nofollow noopener noreferrer" class="mention hashtag" href="https://mastodon.social/tags/Jetpack" target="_blank">#Jetpack</a> <a rel="nofollow noopener noreferrer" class="mention hashtag" href="https://mastodon.social/tags/DataStore" target="_blank">#DataStore</a> <a rel="nofollow noopener noreferrer" class="mention hashtag" href="https://mastodon.social/tags/MVVM" target="_blank">#MVVM</a> <a rel="nofollow noopener noreferrer" class="mention hashtag" href="https://mastodon.social/tags/ViewModel" target="_blank">#ViewModel</a> <a rel="nofollow noopener noreferrer" class="mention hashtag" href="https://mastodon.social/tags/Android" target="_blank">#Android</a> <a rel="nofollow noopener noreferrer" class="mention hashtag" href="https://mastodon.social/tags/Kotlin" target="_blank">#Kotlin</a> <a rel="nofollow noopener noreferrer" class="mention hashtag" href="https://mastodon.social/tags/Jetpack" target="_blank">#Jetpack</a><br><br><a href="https://awakari.com/pub-msg.html?id=4TuZ9XUNgPuIcQ6Qe8QgrSpsS5Q" rel="nofollow noopener noreferrer" target="_blank">Event Attributes</a>
Habr<p>Управление настройками с помощью Jetpack DataStore: Простой подход к сохранению данных разных типов</p><p>Всем здравствуйте. Это моя первая статья на такую публику, поэтому просьба не судить строго! :-) При разработке Android-приложений часто возникает необходимость сохранять пользовательские настройки, такие как выбор темы, язык или другие данные пользователя. Jetpack DataStore — это современное решение для хранения таких данных, которое заменяет устаревший SharedPreferences . В этой статье мы рассмотрим, как использовать DataStore для хранения различных типов данных (Boolean, Integer, Float и String) и как интегрировать его с архитектурой MVVM, используя StateFlow для обновления UI. Что такое DataStore? Jetpack DataStore — это библиотека для хранения данных, поддерживающая асинхронное и безопасное чтение и запись данных. Она предоставляет два типа хранилищ: 1. Preferences DataStore : Используется для хранения пар "ключ-значение" (похож на SharedPreferences ). 2. Proto DataStore : Используется для хранения структурированных данных на основе протокольных буферов. В этой статье мы сосредоточимся на Preferences DataStore , которое идеально подходит для хранения настроек приложения.</p><p><a href="https://habr.com/ru/articles/874034/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">habr.com/ru/articles/874034/</span><span class="invisible"></span></a></p><p><a href="https://zhub.link/tags/Jetpack_DataStore" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Jetpack_DataStore</span></a> <a href="https://zhub.link/tags/MVVM" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>MVVM</span></a> <a href="https://zhub.link/tags/ViewModel" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ViewModel</span></a> <a href="https://zhub.link/tags/Android" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Android</span></a> <a href="https://zhub.link/tags/Kotlin" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Kotlin</span></a> <a href="https://zhub.link/tags/Jetpack" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Jetpack</span></a></p>
Habr<p>Подходы к созданию ViewModel в Android</p><p>В данной статье будут рассмотрены способы создания ViewModel (далее VM) в Android, а также usecase для каждого подхода.</p><p><a href="https://habr.com/ru/articles/871922/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">habr.com/ru/articles/871922/</span><span class="invisible"></span></a></p><p><a href="https://zhub.link/tags/mvvm" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>mvvm</span></a> <a href="https://zhub.link/tags/viewmodel" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>viewmodel</span></a> <a href="https://zhub.link/tags/viewmodelprovider" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>viewmodelprovider</span></a> <a href="https://zhub.link/tags/android" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>android</span></a> <a href="https://zhub.link/tags/kotlin" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>kotlin</span></a></p>
Habr<p>Как я писал суперкастомизированное Android-приложение в 2024 году</p><p>Как я писал супер кастомизированное Android приложение в 2024 году В начале года у меня появилась прикольная идея: сделать Android-приложение, которое будет показывать анимации для алгоритмов сортировки. Чтобы вы сразу поняли, что представляет из себя приложение, на GitHub есть скрины и короткие видео. Давайте по кусочкам разберём мой проект. Читать дальше</p><p><a href="https://habr.com/ru/companies/ruvds/articles/851256/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">habr.com/ru/companies/ruvds/ar</span><span class="invisible">ticles/851256/</span></a></p><p><a href="https://zhub.link/tags/ruvds_%D1%81%D1%82%D0%B0%D1%82%D1%8C%D0%B8" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ruvds_статьи</span></a> <a href="https://zhub.link/tags/android" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>android</span></a> <a href="https://zhub.link/tags/android_view" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>android_view</span></a> <a href="https://zhub.link/tags/kotlin" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>kotlin</span></a> <a href="https://zhub.link/tags/application" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>application</span></a> <a href="https://zhub.link/tags/algorithms" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>algorithms</span></a> <a href="https://zhub.link/tags/sorting_algorithms" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>sorting_algorithms</span></a> <a href="https://zhub.link/tags/viewmodel" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>viewmodel</span></a> <a href="https://zhub.link/tags/viewmodelprovider" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>viewmodelprovider</span></a> <a href="https://zhub.link/tags/sparse_array" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>sparse_array</span></a> <a href="https://zhub.link/tags/custom_view" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>custom_view</span></a> <a href="https://zhub.link/tags/bitwise_operators" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>bitwise_operators</span></a> <a href="https://zhub.link/tags/mvvm" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>mvvm</span></a> <a href="https://zhub.link/tags/mvi" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>mvi</span></a></p>
Habr<p>Как грузить данные во ViewModel?</p><p>Привет, Хабр! Эта статья будет полезна для мобильных разработчиков, потому что в ней обсуждаются различные подходы к первоначальной загрузке данных во вьюмодели (Jetpack ViewModel) при ее использовании в проектах на Jetpack Compose (либо Compose Multiplatform). Тема эта настолько холиварная, что один из самых влиятельных ютуберов в сфере Android-разработки Philip Lackner даже недавно посвятил ей отдельный как всегда очень качественный обзор . Эта статья - во многом ответ и дополнение к нему. Итак, перейдем к сути.</p><p><a href="https://habr.com/ru/articles/848824/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">habr.com/ru/articles/848824/</span><span class="invisible"></span></a></p><p><a href="https://zhub.link/tags/viewmodel" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>viewmodel</span></a> <a href="https://zhub.link/tags/jetpack_compose" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>jetpack_compose</span></a> <a href="https://zhub.link/tags/android" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>android</span></a> <a href="https://zhub.link/tags/jetpack_sdk" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>jetpack_sdk</span></a></p>
Habr<p>[Перевод] ViewModels в Android: «за» и «против». Часть 2</p><p>Продолжение первой части цикла. В первой части мы разобрались в причинах, по которым загрузка данных в блоке init{} может помешать прогрессу; изучили наиболее рациональные методы организации пользовательского интерфейса и логики приложения с помощью ViewModels. Также мы обсудили простые решения и важные тактики, позволяющие избежать часто встречающихся подводных камней. В этой части мы продолжим фокусироваться на важных принципах разработки и оптимизации ViewModel в Android, направленных на улучшение архитектуры приложения и повышение его производительности. Рассмотрим подробнее рекомендации, касающиеся раскрытия изменяемых состояний, использования update{} при использовании MutableStateFlows и «ленивого» внедрения зависимостей в конструктор.</p><p><a href="https://habr.com/ru/companies/otus/articles/842394/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">habr.com/ru/companies/otus/art</span><span class="invisible">icles/842394/</span></a></p><p><a href="https://zhub.link/tags/android_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>android_разработка</span></a> <a href="https://zhub.link/tags/viewmodel" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>viewmodel</span></a> <a href="https://zhub.link/tags/cleancode" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>cleancode</span></a></p>
Habr<p>Выносите ViewModel из Compose функций</p><p>В нашу жизнь андроид разработчиков уже прочно вошел фреймворк Compose. И при создании composable функций возникает соблазн добавить в качестве параметра viewModel. А уже в самой compose функции подписываться на состояния, которые находятся внутри viewModel. Я хочу рассказать, почему так делать не стоит, а передавать в качестве параметров простые классы.</p><p><a href="https://habr.com/ru/articles/837790/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">habr.com/ru/articles/837790/</span><span class="invisible"></span></a></p><p><a href="https://zhub.link/tags/android" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>android</span></a> <a href="https://zhub.link/tags/compose" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>compose</span></a> <a href="https://zhub.link/tags/kotlin" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>kotlin</span></a> <a href="https://zhub.link/tags/viewmodel" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>viewmodel</span></a> <a href="https://zhub.link/tags/refactoring" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>refactoring</span></a></p>
Habr<p>PinLockSreen на основе KeyStore. Kotlin. Jetpack Compose</p><p>В данной любительской статье разберемся, что такое KeyStore в контексте мобильной разработки, для чего нужен и применим его в крайне легком варианте. Также погрузимся в разработку экрана входа в ваше приложение. Статья будет разделена на 3 так называемых раздела — KeyStore, UI и ViewModel.</p><p><a href="https://habr.com/ru/articles/831914/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">habr.com/ru/articles/831914/</span><span class="invisible"></span></a></p><p><a href="https://zhub.link/tags/kotlin" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>kotlin</span></a> <a href="https://zhub.link/tags/android_development" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>android_development</span></a> <a href="https://zhub.link/tags/android_apps" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>android_apps</span></a> <a href="https://zhub.link/tags/android" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>android</span></a> <a href="https://zhub.link/tags/jetpack_compose" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>jetpack_compose</span></a> <a href="https://zhub.link/tags/keystore" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>keystore</span></a> <a href="https://zhub.link/tags/viewmodel" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>viewmodel</span></a> <a href="https://zhub.link/tags/ui" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ui</span></a> <a href="https://zhub.link/tags/github" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>github</span></a></p>
Marcus Kida<p>I really love how sealed classes are a great fit for <a href="https://bearologics.social/tags/ViewModel" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ViewModel</span></a> use cases in <a href="https://bearologics.social/tags/Kotlin" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Kotlin</span></a>.</p>
🧿🪬🍄🌈🎮💻🚲🥓🎃💀🏴🛻🇺🇸<p>&gt; <a href="https://mastodon.social/tags/React" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>React</span></a> <a href="https://mastodon.social/tags/Compiler" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Compiler</span></a> is the result of a problem: the introduction of <a href="https://mastodon.social/tags/hooks" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>hooks</span></a> has led to far too much logic in <a href="https://mastodon.social/tags/components" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>components</span></a>.</p><p>It's clear to me that <a href="https://mastodon.social/tags/Knockout" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Knockout</span></a> had it right back in 2012; <a href="https://mastodon.social/tags/MVVM" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>MVVM</span></a> is the correct pattern for <a href="https://mastodon.social/tags/WebApps" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>WebApps</span></a></p><p><a href="https://www.mikejohnson.dev/posts/2024/06/mobx-react-compiler" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://www.</span><span class="ellipsis">mikejohnson.dev/posts/2024/06/</span><span class="invisible">mobx-react-compiler</span></a></p><p><a href="https://mastodon.social/tags/webDev" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>webDev</span></a> <a href="https://mastodon.social/tags/reactJs" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>reactJs</span></a> <a href="https://mastodon.social/tags/javaScript" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>javaScript</span></a> <a href="https://mastodon.social/tags/mobx" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>mobx</span></a> <a href="https://mastodon.social/tags/observables" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>observables</span></a> <a href="https://mastodon.social/tags/viewModel" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>viewModel</span></a> <a href="https://mastodon.social/tags/programming" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>programming</span></a></p>
Habr<p>[Перевод] ViewModels в Android: «за» и «против»</p><p>В этой серии статей мы рассмотрим лучшие практики использования ViewModels в Android с акцентом на основных принципах повышения качества кода. Рассмотрим роль ViewModels в управлении состоянием пользовательского интерфейса и бизнес-логикой, стратегии для ленивого внедрения зависимостей и важность реактивного программирования. Кроме того, обсудим общие подводные камни, которых следует избегать, такие как неправильная инициализация состояния и обнародование изменяемых состояний.</p><p><a href="https://habr.com/ru/companies/otus/articles/807723/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">habr.com/ru/companies/otus/art</span><span class="invisible">icles/807723/</span></a></p><p><a href="https://zhub.link/tags/android" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>android</span></a> <a href="https://zhub.link/tags/kotlin" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>kotlin</span></a> <a href="https://zhub.link/tags/kotlin_qa" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>kotlin_qa</span></a> <a href="https://zhub.link/tags/Viewmodel" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Viewmodel</span></a></p>
Habr<p>ViewModel + Kotlin Multiplatform. Пробуем нативное решение</p><p>Всем привет! На связи Анна Жаркова, руководитель группы мобильной разработки в компании Usetech. Компания Google объявили о своем интересе к Koltin Multiplatform на прошлом Google I/O 2023. Следом был обозначен вектор развития имеющихся решений архитектурных библиотек Jetpack для поддержки KMP. Буквально считанные часы назад компания Google опубликовали ожидаемую многими новинку, а именно ViewModels из библиотеки Lifecycle с поддержкой API Kotlin Multiplatform. И сейчас мы с вами проверим, насколько это удобно, что уже готово, а что нужно доработать. Для начала освежим, с чем же мы работали до ViewModels из Lifecycle. Сами по себе ViewModel как часть паттерна MVVM применительно к кросс-платформенным решениям идея не новая. Многие давно использовали собственную реализацию, совмещая также с платформенными архитектурами.</p><p><a href="https://habr.com/ru/articles/802111/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">habr.com/ru/articles/802111/</span><span class="invisible"></span></a></p><p><a href="https://zhub.link/tags/kotlin_multiplatform" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>kotlin_multiplatform</span></a> <a href="https://zhub.link/tags/kotlin_multiplatform_mobile" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>kotlin_multiplatform_mobile</span></a> <a href="https://zhub.link/tags/viewModel" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>viewModel</span></a> <a href="https://zhub.link/tags/%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0_%D0%BF%D0%BE%D0%B4_iOS" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>разработка_под_iOS</span></a> <a href="https://zhub.link/tags/%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0_%D0%BF%D0%BE%D0%B4_Android" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>разработка_под_Android</span></a> <a href="https://zhub.link/tags/kmp" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>kmp</span></a> <a href="https://zhub.link/tags/google" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>google</span></a> <a href="https://zhub.link/tags/jetpack" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>jetpack</span></a></p>
TheSwiftDojo<p>For example: assume I have a classic MVVM app and I've created a <a href="https://iosdev.space/tags/ViewModel" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ViewModel</span></a>. Does this graphic decision tree help me decide how/where to store this VM?</p><p>End result - wrap the VM in @EnvironmentObject so I can retrieve it in many Views.</p><p>I don't see this graphic decision tree helping with that decision.</p>
Bob German<p>OMG, a <a href="https://techhub.social/tags/ViewModel" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ViewModel</span></a> in <a href="https://techhub.social/tags/React" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>React</span></a> ?! - Modularizing React Applications with Established UI Patterns - Juntao Qiu - <a href="https://martinfowler.com/articles/modularizing-react-apps.html" rel="nofollow noopener noreferrer" target="_blank"><span class="invisible">https://</span><span class="ellipsis">martinfowler.com/articles/modu</span><span class="invisible">larizing-react-apps.html</span></a> - Interesting read!</p>