Size: a a a

Android Architecture

2020 February 25

(

( in Android Architecture
Ihor Martyniuk
нет, ничего плохого в этом нет. Это говорит, о том, что ваш код(в контексте реактивного стиля программирования) построен граммотно. И в случае изменения внешних условй(ТЗ например), когда некое событие, возникающее сегодня 1 раз за сессию, вдруг начнет возникать множество раз - вы к этому готовы.
Если же событие должно возникать 1 и только 1 раз - это уже бизнесс-правила о который собственно и должен позаботиться продюсер. Если консьюмер нуждается в предоставлении каких-то гарантий  ... я бы пересмотрел организацию кода на всякий случай.
Эх, сча бы от тайплевел гарантий отказываться
источник

IM

Ihor Martyniuk in Android Architecture
(
Эх, сча бы от тайплевел гарантий отказываться
Сударь, вы просили не писать вам.
Это затруднительно при условии, что вы пишете мне)
источник

(

( in Android Architecture
Ihor Martyniuk
Сударь, вы просили не писать вам.
Это затруднительно при условии, что вы пишете мне)
Я вам разрешаю писать
источник

IM

Ihor Martyniuk in Android Architecture
Simon Belialov
consumer должен понимать время жизни подписки. Если допустим после нажатия кнопки создается подписка, и внезапно туда стали приходить очень долго изменения это не оч. И от этого лучше защититься
Ценой такой защиты неизбежно будет гибкость.
Думаете, оно того стоит?
источник

SB

Simon Belialov in Android Architecture
ну да
источник

IM

Ihor Martyniuk in Android Architecture
Simon Belialov
consumer должен понимать время жизни подписки. Если допустим после нажатия кнопки создается подписка, и внезапно туда стали приходить очень долго изменения это не оч. И от этого лучше защититься
Не лучше ли всё-таки возложить эту ответственность на продюсер и принять за правду на уровне консьюмера, что она решена?
источник

(

( in Android Architecture
Ihor Martyniuk
Не лучше ли всё-таки возложить эту ответственность на продюсер и принять за правду на уровне консьюмера, что она решена?
Ну и получается неявное эмпирическое поведение, а между прочим единственность ивента может быть частью контракта
источник

(

( in Android Architecture
если меняется бизнес-требование - меняется контракт, всё нормально
источник

IM

Ihor Martyniuk in Android Architecture
(
Ну и получается неявное эмпирическое поведение, а между прочим единственность ивента может быть частью контракта
Ничего не бывает бесплатно.
Вы мыслете в чёрно-белом спектре.
По-этому собственно и писать вам каждый раз оказывается неинтересно.
И любая дискуссия с вашим участием превращается в холивар.
источник

(

( in Android Architecture
Ihor Martyniuk
Ничего не бывает бесплатно.
Вы мыслете в чёрно-белом спектре.
По-этому собственно и писать вам каждый раз оказывается неинтересно.
И любая дискуссия с вашим участием превращается в холивар.
Красиво вы мне сейчас расписали
источник

(

( in Android Architecture
Только я про платность/бесплатность ничего не говорил, это вы придумали
источник

IM

Ihor Martyniuk in Android Architecture
(
если меняется бизнес-требование - меняется контракт, всё нормально
Согласен. Меняется из - меняется ответственный за логику фичи код.
Вопрос в данном случае заключается в том, какой слой(модуль) должен за эту логику отвечать
источник

IM

Ihor Martyniuk in Android Architecture
Мой подход - обрабатывать логику, описанную @Bouxroix и ее граничные случаи на уровне продюсера( router, interactor).
Таким образом на уровне консьюмера впринципе не фигурируют частные случаи наблюдаемых.
Я от них стараюсь абстрагироваться. И в случае того же изменения ТЗ, мне нужно выполнить изменения только в логике, данных. Адаптерам и фреймворк уровню плевать. Пришла 1 нотификаций - обработали 1 раз. Пришло Н - обработали Н.
Но да, в контексте типизации я теряю информацию. Вопрос в том, нужна ли она.
источник

SB

Simon Belialov in Android Architecture
Ihor Martyniuk
Мой подход - обрабатывать логику, описанную @Bouxroix и ее граничные случаи на уровне продюсера( router, interactor).
Таким образом на уровне консьюмера впринципе не фигурируют частные случаи наблюдаемых.
Я от них стараюсь абстрагироваться. И в случае того же изменения ТЗ, мне нужно выполнить изменения только в логике, данных. Адаптерам и фреймворк уровню плевать. Пришла 1 нотификаций - обработали 1 раз. Пришло Н - обработали Н.
Но да, в контексте типизации я теряю информацию. Вопрос в том, нужна ли она.
Консьюмер может создавать подписку по большому счету в двух местах. В самом начале или по какому то событию (нажатие кнопки). Он должен понимать как именно это делать. Есть есть разные типы это очевидно. Если тип один и как то по названию, ненадежно. Продюсер ничего не знает о консьюмерах. Легко можно что то забыть и при изменении их затронуть
источник

IM

Ihor Martyniuk in Android Architecture
Simon Belialov
Консьюмер может создавать подписку по большому счету в двух местах. В самом начале или по какому то событию (нажатие кнопки). Он должен понимать как именно это делать. Есть есть разные типы это очевидно. Если тип один и как то по названию, ненадежно. Продюсер ничего не знает о консьюмерах. Легко можно что то забыть и при изменении их затронуть
Очень абстрактно. Приведите пример более конкретный, в котором фигурирует ситуация, что вас смущает.
Возможно, я не до конца понял вопррс
источник

IM

Ihor Martyniuk in Android Architecture
Если я верно все понял - решение вашей проблемы в использовании disposableObserver в качестве консьюмера.
Там есть onTerminate и его частные сдучаи
источник

(

( in Android Architecture
Ihor Martyniuk
Мой подход - обрабатывать логику, описанную @Bouxroix и ее граничные случаи на уровне продюсера( router, interactor).
Таким образом на уровне консьюмера впринципе не фигурируют частные случаи наблюдаемых.
Я от них стараюсь абстрагироваться. И в случае того же изменения ТЗ, мне нужно выполнить изменения только в логике, данных. Адаптерам и фреймворк уровню плевать. Пришла 1 нотификаций - обработали 1 раз. Пришло Н - обработали Н.
Но да, в контексте типизации я теряю информацию. Вопрос в том, нужна ли она.
А тесты вы пишете?
источник

IM

Ihor Martyniuk in Android Architecture
(
А тесты вы пишете?
Обижаете)
источник

(

( in Android Architecture
Ihor Martyniuk
Обижаете)
Ну вот короче кмк смысл в том, что то, что фиксируется в тестах в ином случае фиксируется в типе
источник

(

( in Android Architecture
И бог с ним что при изменении бизнес-требований тип приходится менять везде, это говорит только о том, что когда детали реализации (собсна, конкуррентность, выражаемая рксом) вытаскиваются на уровень типов, нужно по-другому дизайнить систему, чтобы сокращать это самое количество мест
источник