All streams
Search
Write a publication
Pull to refresh
45
0
Александр Блинов @Xanderblinov

B2C CTO @hh.ru

Send message
Это было тяжелое решение — на самом деле тут trade off между camelCase в xml и snake_case в котлин файлах. Мы выбрали второй вариант, хотя тут команда разбилась на два лагеря.

На самом деле — это вкусовщина.
Довольно часто встречается ситуация: На экране есть состояния: LOADING, DATA, STUB.
Соответсвенно, у нас будут методы у SomeView
interface SomeView : MvpView{
   fun showData(data: Data)

   fun showError(error: Error)

   fun showStub()

   // еще методы
}


мы хотим, чтобы эти методы были взаимоисключающие, при этом, остальные методы должны лежать в очереди команд. Тут нам поможет кастомная стратегия
Спасибо за интересную статью! dmdev а как подразумевается обработка ситуации, когда процесс убился и произошло последующее восстановление Activity?

В этом случае у Вас PresentationModel будет в состоянии A а View в состоянии B
Всегда говорил, что писали его в Arello командой Пруф ;)
Создатели библиотеки я и senneco это известная информация. Я работаю в REDMADROBOT, поэтому статья публикуется от блога компании — не вижу каких то противоречий

"Наш" = нас с Юрой

Спасибо за замечание, исправим! По умолчанию AddToEndStrategy.
Да, тернарного оператора не достает, но зато if/else являются выражениями и есть очень мощный оператор when.

Еще из таких маленьких неудобств — catch блоки не могут иметь несколько типов исключений. Странно, что JB не ввела в язык еще и этот сахар
главным, да и по сути единственным серьезным недостатком остается debugger у Android Studio, потому что то он все еще плохо работает с Kotlin.

В остальном, котлин значительно увеличил скорость разработки и уменьшил число багов. Попробуйте котлин, после него на Java не хочется писать от слова совсем;-)
Полностью, за исключением форков сторонних либ. В Роботах разработка Android приложений ведется полностью на kotlin
Да, излишне запутанно. Это тот самый случай когда надо выбирать простоту
Без команды SystemMessage это можно сделать двумя способами

А еще есть третий способ, презентер, на который возвращаемся, подписывается на ивенты/обсервер модели о протухании авторизации.

Таким образом, при возврате на экран он примет состояние: показать ошибку авторизации
terrakok нужно третье мнение

senneco можем сделать дополнительный слой абстракции:

В каждой вью нужно будет подключаться к PresenterStore через метод MvpFacade.getPresenterStore

Дефолтная map Presenter с PresenterImpl будет генериться статической кодогенерацией и подаваться как параметр к PresenterStore

MvpFacade будет инициализировать либо тестовым PresenterStore, либо живым с дефолтной мапой.

Остался вопрос, есть ли в этом потребность и на сколько станет все сложнее для понимания)

Добрый день, belovrv

Есть ли способ создать .kt файлы c помощью javax.annotation.processing.Processor?

C первого взгляда кажетя, что использование MVP на экранах с одной кнопкой избыточно. Но, в последствии, начинаешь воспринимать MVP как философию от которой не хочется отходить. Более того, использование одного подхода повсеместно делает приложение консистентным и легким для поддержки.

Основные проблемы MVP подхода уже решены
  • boilerplates связи презентеров и вью решается статической кодогенерацией шаблонов
  • хранение состояние в презентерах решается динамической кодогенерацией

Так что смело используйте!
А у Вас все слои архитектуры в одном пакете? А общие классы куда-нибудь выносите? К примеру, если объект продукт нам понадобится и в каталоге и в корзине, то в какой пакет нам его поместить?
В результате на каждое Activity и Fragment будет свой пакет? В большом проекте в корневом пакете будет слишком много вложенных пакетов. Это осложнит навигацию.

Мы используем описанную иерархию. Она зарекомендовала себя как довольно практичная

В любом случае, разделение по пакетам советую делать так, как удобно Вам, т.к. единого мнения не существует
HotIceCream, складывать все в один пакет удобно до тех пор, пока приложение не разрастается. Представим, что к пакету car относятся 4 Fragment и Activity которое ими управляет. Это означает что в одном пакете будет лежать как минимум 15 классов.

Также непонятно куда складывать базовые классы для Presenter, Activty. По такой логике нам нужно создавать пакет base?

senneco, я уже пробовал раскладывать по логическим пакетам, в результате было не очень удобно. Если в пакет складывать только один экран, то получается слишком мелкое деление, а если несколько, то огород.

для data объектов мы используем отдельный пакет ui_data, в нем также сохраняется разбиение на пакеты

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Works in
Date of birth
Registered
Activity

Specialization

Data Scientist, Prompt Engineer