Это было тяжелое решение — на самом деле тут trade off между camelCase в xml и snake_case в котлин файлах. Мы выбрали второй вариант, хотя тут команда разбилась на два лагеря.
Создатели библиотеки я и senneco это известная информация. Я работаю в REDMADROBOT, поэтому статья публикуется от блога компании — не вижу каких то противоречий
главным, да и по сути единственным серьезным недостатком остается debugger у Android Studio, потому что то он все еще плохо работает с Kotlin.
В остальном, котлин значительно увеличил скорость разработки и уменьшил число багов. Попробуйте котлин, после него на Java не хочется писать от слова совсем;-)
C первого взгляда кажетя, что использование MVP на экранах с одной кнопкой избыточно. Но, в последствии, начинаешь воспринимать MVP как философию от которой не хочется отходить. Более того, использование одного подхода повсеместно делает приложение консистентным и легким для поддержки.
Основные проблемы MVP подхода уже решены
boilerplates связи презентеров и вью решается статической кодогенерацией шаблонов
хранение состояние в презентерах решается динамической кодогенерацией
А у Вас все слои архитектуры в одном пакете? А общие классы куда-нибудь выносите? К примеру, если объект продукт нам понадобится и в каталоге и в корзине, то в какой пакет нам его поместить?
В результате на каждое Activity и Fragment будет свой пакет? В большом проекте в корневом пакете будет слишком много вложенных пакетов. Это осложнит навигацию.
Мы используем описанную иерархию. Она зарекомендовала себя как довольно практичная
В любом случае, разделение по пакетам советую делать так, как удобно Вам, т.к. единого мнения не существует
HotIceCream, складывать все в один пакет удобно до тех пор, пока приложение не разрастается. Представим, что к пакету car относятся 4 Fragment и Activity которое ими управляет. Это означает что в одном пакете будет лежать как минимум 15 классов.
Также непонятно куда складывать базовые классы для Presenter, Activty. По такой логике нам нужно создавать пакет base?
senneco, я уже пробовал раскладывать по логическим пакетам, в результате было не очень удобно. Если в пакет складывать только один экран, то получается слишком мелкое деление, а если несколько, то огород.
для data объектов мы используем отдельный пакет ui_data, в нем также сохраняется разбиение на пакеты
На самом деле — это вкусовщина.
Соответсвенно, у нас будут методы у SomeView
мы хотим, чтобы эти методы были взаимоисключающие, при этом, остальные методы должны лежать в очереди команд. Тут нам поможет кастомная стратегия
В этом случае у Вас PresentationModel будет в состоянии A а View в состоянии B
"Наш" = нас с Юрой
Еще из таких маленьких неудобств — catch блоки не могут иметь несколько типов исключений. Странно, что JB не ввела в язык еще и этот сахар
В остальном, котлин значительно увеличил скорость разработки и уменьшил число багов. Попробуйте котлин, после него на Java не хочется писать от слова совсем;-)
А еще есть третий способ, презентер, на который возвращаемся, подписывается на ивенты/обсервер модели о протухании авторизации.
Таким образом, при возврате на экран он примет состояние: показать ошибку авторизации
В каждой вью нужно будет подключаться к PresenterStore через метод MvpFacade.getPresenterStore
Дефолтная map Presenter с PresenterImpl будет генериться статической кодогенерацией и подаваться как параметр к PresenterStore
MvpFacade будет инициализировать либо тестовым PresenterStore, либо живым с дефолтной мапой.
Остался вопрос, есть ли в этом потребность и на сколько станет все сложнее для понимания)
Есть ли способ создать .kt файлы c помощью javax.annotation.processing.Processor?
Основные проблемы MVP подхода уже решены
Так что смело используйте!
Мы используем описанную иерархию. Она зарекомендовала себя как довольно практичная
В любом случае, разделение по пакетам советую делать так, как удобно Вам, т.к. единого мнения не существует
Также непонятно куда складывать базовые классы для Presenter, Activty. По такой логике нам нужно создавать пакет base?
senneco, я уже пробовал раскладывать по логическим пакетам, в результате было не очень удобно. Если в пакет складывать только один экран, то получается слишком мелкое деление, а если несколько, то огород.
для data объектов мы используем отдельный пакет ui_data, в нем также сохраняется разбиение на пакеты