Conversation
RationalEgoism
suggested changes
Oct 2, 2020
Comment on lines
+11
to
+13
| У MviViewModel есть один абстрактный метод для обработки внешних событий пользователя. | ||
| События должны наследоваться от интерфейса-маркера ViewAction. Также у MviViewModel есть | ||
| livedata, которая держит в себе single state экрана. То есть у MviViewModel есть один вход и один выход. |
Contributor
There was a problem hiding this comment.
- Какой метод для обрабатки внешних событий?
- Он не абстрактный
- По аналогии с ViewAction от чего наследуется SingleState экрана?
Comment on lines
+17
to
+19
| Помимо ограничений в количестве потока данных MviViewModel использует AssistedInject в конструктор для | ||
| получения inititalState через конструктор и механизм для сохранения данных экрана в Bundle - SavedStateHandle. | ||
| AssistedInject используется для передачи SavedStateHandle из фрагмента, который подключает ViewModel. |
Contributor
There was a problem hiding this comment.
- Помимо ограничений в количестве потока данных - лишнее здесь
- Если я правильно понял, то речь идёт о navArgs, которые прокидываются из фрагмента во MviViewModel и доступны внутри неё
|
|
||
| ### MviStoreViewModel | ||
|
|
||
| MviStoreViewModel наследуется от MviViewModel. Единственная ценность этого класса - он хранит в себе список Store, передает Action внутрь Store |
Contributor
There was a problem hiding this comment.
передает Action внутрь Store - запятая
| ### MviStoreViewModel | ||
|
|
||
| MviStoreViewModel наследуется от MviViewModel. Единственная ценность этого класса - он хранит в себе список Store, передает Action внутрь Store | ||
| комбинирует стейты всех сторов в ожин большой стейт. |
| - [Доклад про MVI от Сергея Рябова](https://youtu.be/hBkQkjWnAjg) | ||
| - [Доклад про эволюцию презентационных паттернов](https://youtu.be/J0YPKcDKumk) | ||
| - [Доклад про расширяемую архитектуру в Lyft](https://www.youtube.com/watch?v=_cFHtjIWjCc) | ||
| - [Презентация доклада со внутреннего митапа](Доклад Илюхи) |
| Для использования Single-Activity подхода возникают ситуации, когда несколько экранов нужно объединить одной родительской сущностью. | ||
| Объединение необходимо для хранения общего dagger компонента на flow или организации собственной навигации. | ||
| Раньше можно было использовать Activity. Но в Single-Activity должно быть только одно активити на приложение. В такой архитектуре можно использовать | ||
| parent fragment для всех экран - FlowFragment. FlowFragment обладает своей навигацией. Для навигации используется childFragmentManager этого фрагмента. |
vovaksenov99
suggested changes
Oct 8, 2020
|
|
||
| ### Почему всегда не использовать MviStoreViewModel | ||
|
|
||
| Реализация полного MVI требует много кода. Для простых экранов, то есть для 85 процентов экранов рекомендуется использовать MviViewModel. |
There was a problem hiding this comment.
Suggested change
| Реализация полного MVI требует много кода. Для простых экранов, то есть для 85 процентов экранов рекомендуется использовать MviViewModel. | |
| Реализация полного MVI требует много кода. Для простых экранов (т.е для большиства экранов) рекомендуется использовать MviViewModel. |
|
|
||
| // TODO: перенести в список | ||
| // Переменная, которая отвечает за отображение лоадера в конце списка. Если переменная равна true, лоадер не будет показан | ||
| internal var fullData = false |
There was a problem hiding this comment.
странное название для переменной, которая отвечает за то, чтобы быть флагом наличия или отсутствия лоадера
| object RefreshFailed : Error() | ||
| } | ||
|
|
||
| // Способы обработки ошибки |
| } | ||
|
|
||
| sealed class Error { | ||
| // Ошибка загрузки новой страницы |
|
|
||
| sealed class Error { | ||
| // Ошибка загрузки новой страницы | ||
| object NewPageFailed : Error() |
| // Ошибка загрузки новой страницы | ||
| object NewPageFailed : Error() | ||
|
|
||
| // Ошибка обновления страницы |
| object NewPageFailed : Error() | ||
|
|
||
| // Ошибка обновления страницы | ||
| object RefreshFailed : Error() |
| import javax.inject.Inject | ||
|
|
||
| /** | ||
| * Base parent fragment for fragments of hole feature. FlowFragment has own navigator based on childFragmentManager. |
| })) | ||
| } | ||
|
|
||
| // При байндинге одного из последних элементов списка запускается загрузка следующей страницы |
There was a problem hiding this comment.
Комментарий сомнительной полезности
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.