So far, I have two different ViewModel classes in my project: one that handles login and registration, and another one (HomeViewModel) that handles everything else. The HomeViewModel class is almost 500 lines long and has nearly 30 MutableLiveData objects. I already find the class quite confusing, and I wanted to ask if I should split it into different ViewModel classes. My idea was to either create a separate ViewModel class for each of my fragments or divide the ViewModel class in a way that similar methods are placed in the same ViewModel class, for example, putting everything related to chats and the messenger in one class. Is this a good idea?
How complex should a ViewModel class be?
194 Views Asked by Kleini At
2
There are 2 best solutions below
0
Sachin Singh
On
ViewModel that big causes problem while writing test code. And also you'll face problem while finding bug, and refactoring the code later on, especially when the codebase will get bigger.
Main concern is the viewModel not following separation of concerns.
I think you might be using MVVM architecture right now, that's why you must be having so many mutableLiveData. You should think about moving into MVI architecture, it's an extension to MVVM architecture, but following separation of concerns much better than MVVM.
Related Questions in ANDROID
- Creating global Class holder
- Flutter + Dart: Editing name of a tab shows up a black screen
- android-pdf-viewer Received status code 401 from server: Unauthorized
- Sdk 34 WRITE_EXTERNAL_STORAGE not working
- ussd reader in Recket Native module
- Incorrect display of LinearGradientBrush in IOS
- The Binary Version Of its metadata is 1.8.0, expected Version is 1.6.0 build error
- I can't make TextInput to auto expand properly in Android
- Creating multiple instances of a class with different initializing values in Flutter
- How to create a lottie animation
- making android analyze with coverity sast tool
- Flutter plugin development android src not opening after opening example
- I initialize my ViewModel in the Activity with several fragments as tabs, but the fragments(tabs) return null for the updated livedata
- Node.js Server + Socket.IO + Android Mobile Applicatoin XHR Polling Error...?
- How I can use the shared preferences class?
Related Questions in MVVM
- TelephonyCallback.CallStateListener with LiveData and ViewModel
- Jetpack compose - how I can hookup LiveData property from ViewModel with TextField in activity?
- Jetpack compose ViewModels - should I have one ViewModel for different api calls?
- How to Display UserControl as SplitView Content? - Avalonia C#
- ViewModel property is empty even after initializing it
- How to bind to the DataContext ViewModel of another view?
- Problem updating the interface under MAUI to MVVM
- x:Bind a embeded page to the parent window viewmodel in WinUI 3
- RelayCommand not firing on MenuItem click inside DataGridTextColumn WPF MVVM
- WinUI3 CommunityToolkit MVVM Messenger calling on disposed objects?
- MAUI: How to update an observable property and wait for UI update completion before updating it again?
- Viewmodel as ILogEventSink in a Prism application
- How do I modify ViewModel data from button in swiftui
- Proper way to return value from custom UserControl's DependencyProperty and uses viewModel?
- .NET MAUI MVVM View Initialization doesn't work properly
Related Questions in VIEWMODEL
- Why do I get 'Failed to instantiate a ViewModel' when passing ViewModel class as an argument to a composable?
- Changes to my model/viewmodel are not charging what's on my view
- Android Koin - not found after update to 3.2.0
- Splash Screen Android XML
- Referencing SD card from Kotlin
- Proper way to return value from custom UserControl's DependencyProperty and uses viewModel?
- Blazor two-way data binding with InputSelect never enters VM property set
- LiveData Observer is not working in jetpack compose
- RelayCommand (MVVM Toolkit) Simple Demo explaination
- Hello i have created 3 viewModels and want to connect them to a single View(UI) but can't
- How to asynchronously update UI-related @Published variables in ViewModel?
- QueryProperty on ViewModel gets assigned to variable too late in .NET MAUI?
- Cannot create an instance of com.example.project.mainViewModel when using Jetpack Compose
- GUI doesn't update while running
- How to pass result from viewModelScope to activity
Related Questions in ANDROID-VIEWMODEL
- Inject a class into a composable function using hilt
- Android Kotlin ViewModel is not Loading/Showing content at first launch of the fragment/activity
- Weird SplashScreen "setKeepOnScreenCondition" behavior (with simple minimal example)
- Shared View Model in Android Not Seen by Child Fragment
- Jetpack Composable isn't updating(redrawing) after the viewModel is updated
- Cannot create an instance of com.example.project.mainViewModel when using Jetpack Compose
- SavedStateHandle ViewModel Not Preserving State Across Navigation and Stack Clearing
- Which Android component to use for orchestration (automatism)?
- Is it a good idea to use SharedViewModel (with Flow inside it) between a ForegroundService and a UI Component (Fragment/ Composables)
- Fragment which is not in foreground is not getting updated while observing a state object in activity scope viewModel
- Kotlin Stateflow new value emitted but not collected
- Dagger cycle dependency issue for ViewModelFactory and AndroidInjection
- ViewModel and use of context to fetch a 50x50 list of localized strings ressources?
- Why does my app keep stopping after implementing a ViewModel and Dialog pop up?
- Trying to store API data fetched with Retrofit2 in a mutableList, returns an empty list
Related Questions in MUTABLELIVEDATA
- TelephonyCallback.CallStateListener with LiveData and ViewModel
- Multiple MutableLiveData change results in a single MutableLiveData
- Activity unable to observe second livedata object within viewmodel
- mutableStateListOf is not updating it value on changing it
- ViewModel function implementation with MutableLiveData or use directly a LiveData?
- MutableLiveData with ArrayList and ArrayAdapter
- How to use MutableLiveData and LiveData in Android?
- Kotlin How to share between 2 different activitiy's 2 different fragments
- Updating MutableLiveData<ArrayList<User>>
- mutableLiveData doesn't trigger recomposition when adding items to a list
- Toast Message keeps appearing when orientation changes
- In Junit test, MutableLiveData value not updating after executing test
- Diff util not updating items in recycler
- How to notify observers after filtering LiveData<List<Note>> using SearchView in ViewModel?
- MVVM Architecture Screen Rotation Issues
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular # Hahtags
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
I don't really understand how you present your project and what use case you are facing. Nevertheless, if you have one screen for both login and registration, I think that's fine. However, if you have them in two different screens, I think that's not the best one.
As stated in the docs.
I think you need to really change your perspective of how to use view model.