Как стать автором
Обновить

Комментарии 4

Было бы здорово описать минусы тех. решений о которых вы говорите "дебри". Возможно у тех решений есть плюсы, которых нет у вас. И на долгой дистанции(или большого проекта) ваше решение не будет работать.


Лично для меня пока из существующих решений для среднего проекта мне подошёл MvRx от AirBnb.
Во-первых они построили его на существующих элементах(Fragment, ViewModel). Во-вторых всю работу со Store/Reducer скрыли с глаз долой.

Очень много минусов. За простотой скрыто понимание как там работает внутри.
Store монолит. нельзя отдельно протестировать actor, reducer.
К стору также нужно обязательно аттачить view, что также сказывается на тестировании. Нельзя к нему приаттачить TestObservable какой нибудь и протестировать смену стейтов.
В результате теряется главный плюс MVi, слабосвязанность и хорошая тестируемость отдельных компонентов.

Store без View вне тестирования не имеет смысла. Делать Store наследником ObservableSource, к которому можно подписаться, я не считаю правильным, т.к. не нравится идея работы с подпиской из View (или, что хуже, дополнительной прослойки).
О тестировании в целом. Тестирование того же Reducer все же возможно, но не обособленно. И TestObservable приаттачить можно, но, как и в случае с Reducer, придется приложить дополнительные усилия в виде различных оберток.

Минус существующих решений, на мой взгляд, — один. И он очень субъективен: если нет четкого, полного понимания, что и как работает внутри самого подхода, процесс изучения усложняется при использовании данных решений (по крайней мере, я столкнулся именно с этим).
Что мне не нравилось (и из-за чего возникали сложности с данными решениями):
1) Отход от стандартных терминов (вообще, здесь сложно говорить о каких-то стандартных терминах в MVI), навязывая свои. Не критично, но вызывает своего рода сложности;
2) Раздутость. Некоторые под каждый кусок функционала используют отдельный класс. SRP — это здорово, не спорю. Изначально делал также, но мне не понравилось, как выглядело конечное решение; по итогу — многое заинлайнил.
3) Подписка / .subscribe() / Disposable внутри View.

Основной минус получившегося решения (с чем согласен с linyaKoder) — потеря хорошей тестируемости, предполагаемой подходом. Вырос он из того, что на этапе «сейчас» об этом пункте я попросту не подумал. Постараюсь исправить это в дальнейшем.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории