• Многомодульность в Android с точки зрения архитектуры. От А до Я

      Всем привет!

      Не так давно мы с вами осознали, что мобильное приложение — это не просто тонкий клиент, а это действительно большое количество самой разной логики, которое нуждается в упорядочивании. Именно поэтому мы прониклись идеями Clean architecture, прочувствовали, что такое DI, научились использовать Dagger 2, и теперь с закрытыми глазами способны разбить любую фичу на слои.

      Но мир не стоит на месте, и с решением старых проблем приходят новые. И имя этой новой проблемы — мономодульность. Обычно об этой проблеме узнаешь, когда время сборки улетает в космос. Именно так и начинаются многие доклады про переход на многомодульность (раз, два).
      Но почему-то все при этом как-то забывают, что мономодульность сильно бьет не только по времени сборки, но и по вашей архитектуре. Вот ответьте на вопросы. На сколько у вас AppComponent большой? Не встречаете ли вы периодически в коде, что фича А зачем-то дергает репозиторий фичи Б, хотя вроде такого быть не должно, ну или оно должно быть как-то более верхнеуровнево? Вообще у фичи есть какой-то контракт? А как вы организовываете общение между фичами? Есть какие-то правила?
      Вы чувствуете, что мы решили проблему со слоями, то есть вертикально все вроде хорошо, но вот горизонтально что-то идет не так? И просто разбиением на пакеты и контролем на ревью не решить проблему.

      И контрольный вопрос для более опытных. Когда вы переезжали на многомодульность, не приходилось ли вам перелопачивать половину приложения, вечно перетаскивать код с одного модуля в другой и жить с несобирающимся проектом приличный отрезок времени?

      В своей статье я хочу вам рассказать, как дошел до многомодульности именно с архитектурной точки зрения. Какие проблемы меня беспокоили, и как я их старался поэтапно решать. А в конце вас ждет алгоритм перехода с мономодульности на многомодульность без слез и боли.
      Читать дальше →
      • +23
      • 22.3k
      • 7
    • RxPM — реактивная реализация паттерна Presentation Model


        Через полгода после выхода прошлой статьи о сравнении RxPM c другими презентационными паттернами мы с Jeevuz, наконец, готовы представить библиотеку RxPM — реактивную реализацию паттерна Presentation Model. Давайте сделаем небольшой обзор основных компонентов библиотеки и покажем, как их использовать.


        Читать дальше →
        • +10
        • 8.9k
        • 3
      • Рентабельный код 2: крадущийся DDD, затаившийся CQRS

        • Tutorial

        Трем программистам предложили пересечь поле, и дойти до дома на другой стороне. Программист-новичок посмотрел на короткую дистанцию и сказал, «Это не далеко! Это займет у меня десять минут». Опытный программист посмотрел на поле, немного подумал, и сказал: «Я мог бы добраться туда за день». Новичок посмотрел на него с удивлением. Гуру-программист посмотрел на поле и сказал. «Кажется минут десять, но я думаю пятнадцати будет достаточно». Опытный программист рассмеялся.

        Программист-новичок двинулся в путь, но в течение нескольких мгновений, начали взрываться мины, оставляя после себя большие ямы. От взрывов он отлетал назад, и ему приходилась начинать сначала снова и снова. У него ушло два дня чтобы достичь цели. К тому же он весь трясся и был ранен, когда пришел.

        Опытный программист пополз на четвереньках. Осторожно щупая землю и ища мины, двигаясь только если был уверен, что это безопасно. Медленно и осторожно он пересек поле в течение дня. Только задев пару мин.

        Гуру программист пустился в путь, и пошел прямо через поле. Целеустремленно и прямо. Он достиг цели всего за десять минут.
        «Как тебе это удалось?» — спросили двое других — «Как ты умудрился не зацепить ни одной мины?»
        «Легко» — ответил он. «Я не закладывал мины на своем пути».

        Как ни прискорбно, придется признать – мы сами закладываем себе мины. В первой части я подробно разобрал основные риски в разработке ПО и описал технологические и методологические способы ослабления этих рисков. За прошедший год я получил множество комментариев, основной смысл которых сводился к следующему: «все круто, но с чего начать и как все это будет выглядеть в реальном мире». Действительно, первый текст носит скорее теоретический характер и представляет собой каталог ссылок. В этой статье я постараюсь привести как можно больше примеров.
        Читать дальше →
      • Охота на мифический MVC. Обзор, возвращение к первоисточникам и про то, как анализировать и выводить шаблоны самому

          — Не понимаю, почему люди так восхищаются этим Карузо? Косноязычен, гугнив, поёт — ничего не разберешь!
          — А вы слышали, как поёт Карузо?
          — Да, мне тут кое-что из его репертуара Рабинович напел по телефону.

          Детектив по материалам IT. Часть первая


          Я осознаю, что писать очередную статью на тему Модель-Вид-Контроллер это глупо и вредно для «кармы». Однако с этим «паттерном» у меня слишком личные отношения – проваленный проект, полгода жизни и тяжелой работы «в корзину».


          Проект мы переписали, уже без MVC, просто руководствуясь принципами – код перестал быть похож на клубок спагетти и сократился наполовину (об этом позже, в обещанной статье про то, как мы применяли «принципы» в своем проекте). Но хотелось понять, что же мы сделали не так, в чем была ошибка? И в течении долгого времени изучалось все, что содержало аббревиатуру MVC. До тех пор пока не встретились исходные работы от создателя – Трюгве Реенскауга…


          И тогда все встало на свои места. Оказалось что фактически на основе принципов мы пере-изобретали «original MVC». А то, что зачастую преподносится как MVC, не имеет к нему никакого отношения… впрочем также как и к хорошей архитектуре. И судя по тому сколько людей пишет о несостоятельности «классического MVC», спорит о нем и изобретает его всевозможные модификации, не одни мы столкнулись с этой проблемой.


          Более 30 лет собранные в MVC идеи и решения остаются наиболее значимыми для разработки пользовательских интерфейсов. Но как ни странно, несмотря на существующую путаницу и обилие противоречивых трактовок, разработчики продолжают довольствоваться информацией «из вторых рук», черпая знания о MVC из википедии, небольших статей в интернете и фреймворков для разработки веб-приложений. Самые «продвинутые» читают Мартина Фаулера. И почему-то почти никто не обращается к первоисточникам. Вот этот пробел и хотелось бы заполнить. И заодно развеять некоторые мифы.


          Читать дальше →
        • Как перестать использовать MVVM

            Двухголовый MVVM

            На недавнем DroidCon Moscow 2016 был доклад о MVVM c Databinding Library и доклад о библиотеке Moxy, помогающей работать с MVP. Дело в том, что за последние полгода мы успели опробовать оба подхода на живых проектах. И я хочу рассказать о своём пути от освоения Databinding Library и выпуска в продакшн проекта на MVVM до осознания, почему я больше не хочу использовать этот паттерн.

            Читать дальше →
          • Пишем MVP приложение на Kotlin под Android



              Разработка приложений на Kotlin под Android набирает популярность среди разработчиков, однако статей в русскоязычном сегменте Интернета довольно мало. Я решил немного подправить ситуацию, и написать туториал по разработке приложения на Kotlin. Мы напишем полноценное приложение с использованием всех трендовых библиотек (кроме RxJava) в мире Android-разработки. В конце у нас должно получиться расширяемое и легко тестируемое приложение (сами тесты мы писать не будем).
              Читать дальше →
            • 1000+ часов видео по Java на русском

              • Tutorial
              Добрый день.
              Меня зовут Головач Иван, я руковожу небольшой образовательной компанией и преподаю сам:
              1. Java Core
              2. Junior Java Developer: Servlet API, JDBC, Maven, JUnit, Mockito, Log4J, основы Spring/SpringMVC, основы JPA/Hibernate, шаблоны/архитектуры MVC/IoC/DAO.
              3. Multicore programming in Java.


              Также я веду курс «Scala for Java Developers» на платформе для онлайн-образования udemy.com (аналог Coursera/EdX).

              В следствии этого у меня скопилось значительно количество ссылок на видео на русском языке по Java как моего авторства, так и моих коллег.

              (GolovachCourses.com)


              Здесь собраны несколько вариантов записи моего курса Java Core.
              Модуль #1 (Procedural Java):
              Набор июль 2013: #1, #2, #3, #4
              Набор апрель 2013: #1, #2, #3, #4
              Набор февраль 2013: #1, #2, #3, #4
              Набор январь 2013: #1, #2, #3, #4
              Набор октябрь 2012: #1, #2, #3, #4.
              Читать дальше →
              • +102
              • 1093k
              • 38
            • Книги, которые должен прочитать Java программист: от новичка до профессионала

              • Translation

              Книги, которые должен прочитать Java программист: от новичка до профессионала


              [Примечание переводчика: термины градации «профессионализма» оставлены англоязычные в связи с трудностью их адекватного перевода на русский и несовпадением с привычными Junior-Middle-Senior-Lead. Перевод достаточно вольный — если знаний языка хватает, то лучше читать оригинал, как и советует автор. Оба языка для меня не родные, так что про ошибки сообщайте в личку — исправим. Здесь и далее в квадратных скобках примечания переводчика]

              Я заметил, что в последние месяцы я рекомендую одни и те же книги как новичкам, так и опытным разработчикам. Поэтому я решил составить список этих книг. Они составили мне неплохую компанию в процессе моего роста от новичка до сегодняшнего уровня (какой-бы он не был :) )
              Читать дальше →
            • Книжная полка: Java

                По мотивам «JAVA → Java по-русски. Часть первая: Книги» habrahabr.ru/blogs/java/66568


                Добрый день, уважаемые хабровчане!
                В предыдущем обзоре Java книг, проведенном пользователем Scala, было рассказано о «практических» книгах, вышедших на рынок в последние три года. Я же хочу рассказать об этих и других книгах с несколько иного ракурса: попытаться выделить ценность информации книг.
                Я не любитель читать с монитора, и предпочитаю книги покупать в бумажном варианте. Чтобы сделать осознанный выбор, следует отдавать себе отчет в том, что книга несет некие фундаментальные знания, но никак не сборник «последние фишки». Также в данной статье я хочу упомянуть о других известнейших трудах, не касающихся Java напрямую. Посмотрим, что лучше всего выбрать для обучения языку?
                Читать дальше →
              • Moxy — реализация MVP под Android с щепоткой магии

                  Что такое MVP


                  MVP – это способ разделения ответственности в коде приложения. Model предоставляет данные для Presenter. View выполняет две функции: реагирует на команды от пользователя(или от элементов UI), передавая эти события в Presenter и изменяет gui по требованию Presenter. Presenter выступает как связующее звено между View и Model. Presenter получает события из View, обрабатывает их(используя или не используя Model), и командует View о том, как она должна себя изменить.

                  У такого подхода к разделению ответственности есть ряд плюсов:
                  1. Сильно упрощается написание тестов к коду
                  2. Легко менять какую-то часть, не ломая при этом другую
                  3. Код разбивается на мелкие кусочки, за счёт чего он становится более понятным и читабельным

                  В то же время, конечно, есть и минусы:
                  1. Кода становится больше
                  2. К этому подходу нужно привыкать
                  3. На данный момент не сильно распространённый(но известный) подход, поэтому приходится всем рассказывать о нём

                  Читать дальше →
                • Gradle: управляя зависимостями

                  • Tutorial
                  Управление зависимостями – одна из наиболее важных функций в арсенале систем сборки. С приходом Gradle в качестве основной системы сборки Android-проектов в части управления зависимостями произошёл существенный сдвиг, закончилась эпоха ручного копирования JAR-файлов и долгих танцев с бубном вокруг сбоящих конфигураций проекта.



                  В статье рассматриваются основы управления зависимостями в Gradle, приводятся углублённые практические примеры, небольшие лайфхаки и ссылки на нужные места в документации.

                  Внимание много текста и изображений
                • Создание нестандартного компонента с нуля. Часть 1

                    Вступление


                    Приветствую, коллеги!

                    Достаточно часто при разработке мультимедийных Андроид-приложений (далее просто “приложений”) мы сталкиваемся с задачей создания собственных компонентов, не предусмотренных в системе. Это могут быть всяческие ручки-переключатели, визуализаторы спектра и т. п. Некоторые из них могут быть получены простой заменой графического ресурса, поворотом канвы на 90 градусов и т. п. Но, иногда, все же приходится делать что-то свое “с нуля”.
                    В этой статье я собираюсь рассказать о создании компонента — простой клавиатуры фортепиано, при помощи наследования от класса View и реализации всех внутренностей “самостоятельно”. Почему в кавычках — увидите дальше.

                    В серии статей я постараюсь осветить такие вопросы, как:

                    1. отрисовка компонента
                    2. добавление скроллинга с использованием стандартных скроллбаров
                    3. взаимодействие, использование селекторов для клавиш
                    4. Сохранение состояния компонента при повороте экрана
                    5. добавление подсветки при оверскролле
                    6. передача параметры в XML
                    7. pinch zoom


                    Первая статья будет о первых трёх пунктах.

                    Если Вам интересны эти темы, добро пожаловать под кат.
                    Читать дальше →
                    • +56
                    • 37k
                    • 5
                  • Потоковое видео в Android

                      В этой заметке я хочу рассказать о некоторых подводных камнях, с которыми можно столкнуться при работе с потоковым видео в Android приложениях. Конкретно, речь пойдёт о конвертации видео и протоколах доставки/воспроизведения видео.
                      Сразу оговорюсь, что экспертом я в данной области не являюсь, а лишь хочу поделится недавно полученным опытом.


                      Читать дальше →
                    • Топ-10 недооцененных веб-приложений 2011 года

                      • Translation
                      Мы регулярно натыкаемся на новые веб-приложения, однако не все из них получают заслуженную долю внимания. И в последние дни 2011 года мы хотели бы рассказать о десяти из них, которые, как нам кажется, достойны большей известности.

                      10. Мини-приложения




                      Начать список мы решили не с одного, а сразу с набора приложений. Остановимся на тех, которые выполняют одну простую функцию, но выполняют ее отлично. Среди них Every Time Zone (показывает текущее время во всех часовых поясах), Umbrella Today? (сообщает, понадобится ли вам сегодня зонтик) и notepad.cc (минималистичный блокнот). Еще есть Spreeder, который позволяет вам читать текстовую информацию заметно быстрее обычного; SleepyTime — скажет, когда вам нужно лечь спать, чтобы проснуться в оптимальное время; а также SimplyNoise, умеющий генерировать так называемый белый шум.

                      За кадром осталось еще много “умных” и полезных веб-утилит, для описания которых нам здесь просто-напросто не хватит места. Но вот вам все же несколько вдогонку: 0to255, Mixest, PDFMyURL, и Copy Paste Character.
                      Читать дальше →
                    • Всё, что вы хотели узнать о рефакторинге, но боялись спросить

                        Господа, рад представить вам свой новый проект — Refactoring.guru.

                        Сайт представляет собой каталог запахов грязного кода и, собственно, самих приёмов рефакторинга. В двух словах — это как книга Мартина Фаулера, но лучше. А именно:

                        • Весь контент доступен на русском языке. Я старался делать описания как можно более живыми, чтобы избавиться от чувства унылости и скуки, которое возникает при чтении любой переводной книги о рефакторинге.
                        • Все примеры подаются на Java и PHP. Другие языки обязательно будут добавляться со временем, но я пока затрудняюсь решить, каким будет следующий, можете предлагать в комментах.
                        • Всё везде перелинковано. Рефакторинги сгруппированы по предназначениям и связям.


                        Супер-мега-фишка, которой я очень горжусь — интерактивные примеры с объяснениями (внизу страницы). Такими примерами пока что покрыты первые две главы, но я работаю над тем, чтобы добавить их и в остальные главы.

                        Как видите, есть еще громадное поле для работы, как говорится, «если вам не стыдно за первую версию продукта — вы отрелизились слишком поздно». Тем не менее, я надеюсь, что кому-то сайт будет интересен уже сейчас.

                        Буду рад всем отзывам и пожеланиям! (а также лайкам и твитам)

                        Читать дальше →
                      • AndroidSocialNetworks — удобная работа с социальными сетями


                        AndroidSocialNetworks — это библиотека для Android, которая делает работу с соц. сетями проще. Если вы когда-либо пробовали работать с соц. сетями, то знаете насколько это тяжело. Нужно прочитать документацию для каждой соц. сети, скачать и подключить SDK или стороннюю библиотеку, позаботиться о жизненном цикле http запросов. AndroidSocialNetwork должна сделать вашу жизнь проще, она содержит общий интерфейс для Facebook, Twitter, LinkedIn и Google Plus — просто сбилдите SocialNetworkManager с помощью SocialNetworkManager.Build -> добавьте его в FragmentManager -> настройте AndroidManifest.xml -> работайте с настроенными соц. сетями. Вы сможете делать login, постить обновление статуса, постить фотки, добавлять / удалять друзей.
                        Читать дальше →
                      • Жизненный цикл Activity Stack (часть 1)

                        Пожалуй, самый популярный вопрос на собеседованиях на Android-разработчика звучит так: «расскажите нам про жизненный цикл Activity». На первый взгляд в этом нет ничего сложного, в каком только блоге об этом ещё не писали, и кандидат тут же начинает рисовать известную блок-схему и по ходу пояснять. Сферический life cycle в вакууме, которым изобилуют все уроки, действительно достаточно прост для понимания, но ведь activity — это только часть некой обобщающей их сущности. Сущность эта называется Activity Stack, и с его жизненным циклом мы сейчас постараемся разобраться.

                        Жизненный цикл Activity Stack (часть 2)
                        Читать дальше →
                        • +9
                        • 20.9k
                        • 6
                      • Жизненный цикл Activity Stack (часть 2)

                          Как и договаривались в первой части статьи, в этой мы будем рассматривать инструменты для изменения стандартного поведения Activity Stack.

                          Вся теория по сегодняшей теме присутствует на developer.android.com/guide/topics/manifest/activity-element.html, я буду кое-где на неё ссылаться, а мы постараемся разобраться как оно работает на деле и выяснить, в каких ситуациях это можно использовать в реальной жизни.
                          Читать дальше →
                          • +11
                          • 22.2k
                          • 6
                        • Выжимаем максимум из DDMS

                          DDMS (Dalvik Debug Monitor Server) — безумно полезный инструмент для отладки приложений, который идет в комплекте с Android SDK, о котором почему-то особо и не сказано на хабре, впрочем как и в примерах google он представлен в очень скромном виде. Я бы хотел раскрыть его возможности и показать на что он способен. Вкратце:
                          • изучать информацию о работающих потоках;
                          • анализировать heap на количество свободной и занятой памяти;
                          • анализировать какие объекты чаще создаются, их размер и другое (Allocation tracker);
                          • находить проблемные участки кода, которые долго работают и требуют оптимизации (Method profiling). Это я советую знать всем.

                          Об этих вещах будет рассказано в рамках данной статьи. И для справки, менее интересное, что довольно тривиально и о чем НЕ будет рассказано в рамках данной статьи:
                          • работать с файловой системой эмулятора или устройства;
                          • находить информацию об ошибках (привет LogCat);
                          • эмулировать звонки/смс/местоположение;
                          • использовать инструмент Network Statistics.


                          Если заинтересовались, прошу под кат.
                          • +34
                          • 30k
                          • 6