Size: a a a

Android Architecture

2017 January 28

MT

Max Tuev in Android Architecture
Eugene Matsyuk
Давайте обратимся к истокам. Щас вот наброшу прям =)
А почему именно нельзя иметь контект в презентере или бизнес-логике? В чем обоснование?
Я слышал такие причины, что нельзя тогда простестить. Но есть Роболектрик, пожалуйста.
Роболектрик долгий. У меня он стартует за 6 секунд, это много?
На сколько я знаю, если Роболектрик стартовал для одного теста, то уже просто подрубается к следующим. То есть 6 секунд тратится один раз. Дальше все по накатке.
Действительно иногда требуется либо получение строки, либо даты, либо еще чего-то.
Не спорю, можно это обходить энамом, врапперами и т.д. Но стоит ли это того?
Я придерживаюсь позиции, что архитектура должна нам прежде всего помогать, а не усложнять. А если следовать бездумно некоторым  канонам, смысл которых не так ясен, мне кажется не совсем верным.
К теме, почему нельзя/можно использовать контекст в презентере. Я придерживаюсь такого мнения: контекст в презентере открывает огромное количество вариантов для чего его можно использовать. Когда видишь зависимость презентера от контекста, то мозг сразу настораживается, непонятно для чего конкретно он используется.
Если презентер зависит только от самописных классов(причем построенных по принципу единственной ответственности) то просто глядя на конструктор презентера можно очертить границы, на что он может повлиять и от чего он зависит. Если конечно вы работаете в команде, каждый член которой имеет внутреннюю дисциплину и понимает какие границы использования контекста в презентере или у вас жесткое код ревью то проблем не должно быть, но если это не так, то на выходе можно получить проект, который вроде построен по MVP, но на самом деле имеет презентеры с размытой ответственностью и с различными side-эффектами. К тому же при таком раскладе может сыграть теория разбитых окон. Поэтому лучше задать изначальные ограничения на зависимости презентера и избавить проект от будущих проблем. Естественно за это придется заплатить чуть большим количеством кода, но, как известно, разрабы больше времени читают а не пишут код.
источник

AZ

Alexandr Zherebtsov in Android Architecture
Max Tuev
К теме, почему нельзя/можно использовать контекст в презентере. Я придерживаюсь такого мнения: контекст в презентере открывает огромное количество вариантов для чего его можно использовать. Когда видишь зависимость презентера от контекста, то мозг сразу настораживается, непонятно для чего конкретно он используется.
Если презентер зависит только от самописных классов(причем построенных по принципу единственной ответственности) то просто глядя на конструктор презентера можно очертить границы, на что он может повлиять и от чего он зависит. Если конечно вы работаете в команде, каждый член которой имеет внутреннюю дисциплину и понимает какие границы использования контекста в презентере или у вас жесткое код ревью то проблем не должно быть, но если это не так, то на выходе можно получить проект, который вроде построен по MVP, но на самом деле имеет презентеры с размытой ответственностью и с различными side-эффектами. К тому же при таком раскладе может сыграть теория разбитых окон. Поэтому лучше задать изначальные ограничения на зависимости презентера и избавить проект от будущих проблем. Естественно за это придется заплатить чуть большим количеством кода, но, как известно, разрабы больше времени читают а не пишут код.
+, это называется еще компилируемая документация, считается большим преимуществом DI через конструктор
источник

AZ

Alexandr Zherebtsov in Android Architecture
Vitaliy Babichev
О, спасибо за материал
если интересно послушать, чтобы не искать https://radio-t.com/p/2016/10/01/podcast-515/
источник
2017 January 29

AI

Alexey Illarionov in Android Architecture
Alexandr Zherebtsov
а вот для андроида вопрос открыт, наверное)
На reddit был недавно пост ближе к андроиду https://www.reddit.com/r/androiddev/comments/5jkkgz/problem_with_over_engineering_interview_tasks/
источник

ИО

Игорь Озеркин in Android Architecture
Alexandr Zherebtsov
ну а что, часто в презентере есть зависимости на фреймворк, ну иногда это бывает удобно, например текст дефолтный показать какой нибудь getView().showErrorMessage(ContextCompat.getString(context, R.string.default_error));
Презентер вью должен сказать - покажи дефолтный текс и она его грузит из ресурсов
источник

AZ

Alexandr Zherebtsov in Android Architecture
Игорь Озеркин
Презентер вью должен сказать - покажи дефолтный текс и она его грузит из ресурсов
норм, если текст из ресурсов один)
источник

AZ

Alexandr Zherebtsov in Android Architecture
жалко типа) ну у него скорее вопрос, а нужно ли показывать на интервью, что ты умеешь чистую архитектуру, когда у тебя 45 минут времени, а в обычных проектах он скорее всего с размахом там фигачит)
источник

AB

Alexander Bilchuk in Android Architecture
Коллеги, интересует ваше мнение:) Дано: проект на Clean Architecture (MVP) с RX и Dagger. Что нужно: отправлять эвенты аналитики (с самыми ралзичными параметрами) и изменения параметров пользователя (User Properties для Amplitude). Проблема в том, что эвенты аналитики могут быть "разноуровеневые": не только о ходе выполнения бизнес-логики, но и различные мелочи типа "пользователь что-то засвайпил или открыл Options Menu", или эвенты открытия того или иного экрана с указанием параметра "с какого экрана этот экран был открыт", или вообще сугубо нефункциональные вещи, вроде времени прогрузки экрана с информацией в мс. В итоге получилось, что  AnalyticsManager (класс, у которого наружу торчат конкретные методы отправки аналитики) присутствует и в презентере, и в интеракторе (иногда даже во view). Но, так как эвенты могут быть достаточно заковыристыми, то частенько в методы презентера или интерактора приходится передавать различную "левую информацию для аналитики", которая абсолютно для функционирования системы не нужна. Как итог: MVP превращается в мясо, интерфейсные методы становятся "грязными" от обилия аргументов для аналитики. Вопрос, кто-нибудь встречался с такой проблемой? Как вы в своем проекте организуете работу с аналитикой?
источник

AB

Alexander Bilchuk in Android Architecture
Мне видится решение под названием "надо было думать раньше и не забывать про аналитику во время проектирования архитектуы", но часто аналитику просят добавить уже за пару дней до релиза, и уже несколько поздно, а ломать код для аналитики не очень хочется (страшно же перед релизным тестированием) :)
источник

А

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

AB

Alexander Bilchuk in Android Architecture
Андрей
я у себя сейчас хочу попробовать вынести это на аспекты. а то эта аналитика реально код загрязняет. а так написал аспект, в нужном месте навесил аннотацию - и оно автоматом все сделало. на бекенде такой подход себя неплохо зарекомендовал. надеюсь что и эксперимент с андроидом удастся
Андрей, благодарю за наводку! Признаться честно, я абсолютно не разбираюсь в АОП и AspectJ, но никогда не поздно начать) Будет очень интересно узнать о вашем опыте и впечатлениях, когда ваш эксперимент завершится (надеюсь и желаю, чтобы все у вас получилось)!
источник

ИО

Игорь Озеркин in Android Architecture
Андрей
я у себя сейчас хочу попробовать вынести это на аспекты. а то эта аналитика реально код загрязняет. а так написал аспект, в нужном месте навесил аннотацию - и оно автоматом все сделало. на бекенде такой подход себя неплохо зарекомендовал. надеюсь что и эксперимент с андроидом удастся
На аспектах писал аналитику:-) но проблема в том, что через аннотации нельзя динамические данные передать. Только если в точке среза пытаться что-нибудь отыскать. Аналитика на аспектах очень красиво выглядить, но я остановился на использовпнии аналитик менеджера и т.д. Инжектил его во вью даггером, в презентере никаких ссылок на аналитику небыло. Все через вью.
источник

ИО

Игорь Озеркин in Android Architecture
Хотя можно методы заводить конкретно для аналитики, метить аннотацией и передавать нужные аргументы через сигнатуру метода и в точке среза их и получать:-) огонь! Надо запилить в текущем проекте B-)
источник

EM

Eugene Matsyuk in Android Architecture
@IgorOzerkin @Mujahit
Кстати очень интересный подход на аспектах. Тоже никогда не пробовал.
Круто, спасибо =)
источник

А

Андрей in Android Architecture
Игорь Озеркин
Хотя можно методы заводить конкретно для аналитики, метить аннотацией и передавать нужные аргументы через сигнатуру метода и в точке среза их и получать:-) огонь! Надо запилить в текущем проекте B-)
Вот именно так и хотел попробовать.
источник

SD

Sergey D in Android Architecture
У меня тоже такая задача. 3 анвлитики гугл фб флури
источник

AP

Alexey Pushkarev in Android Architecture
Sergey D
У меня тоже такая задача. 3 анвлитики гугл фб флури
госпади, обкололи апп аналитиками ((
источник

AP

Alexey Pushkarev in Android Architecture
зачем сразу 3 то?
источник

AK

Anatolii K in Android Architecture
можно либо заюзать аспекты и методы отмечать аннотацией либо сделать свой фасад и уже за ним пинать хоть четыре аналитики
источник

AZ

Alexandr Zherebtsov in Android Architecture
Anatolii K
можно либо заюзать аспекты и методы отмечать аннотацией либо сделать свой фасад и уже за ним пинать хоть четыре аналитики
фасад? для сквозных аспектов приложения декоратор стандартное решение
источник