May 17, 2024

9. Android-разработка. Проектирование Android приложений. | Технострим  

9. Android-разработка. Проектирование Android приложений. | Технострим

https://www.youtube.com/watch?v=dusPvKaH7nE

00:00 Введение в проектирование Android-приложений

• Дмитрий рассказывает о своем курсе по проектированию Android-приложений и объясняет, что материал сложный для понимания, но важно иметь представление о том, какие компоненты существуют и как они работают.
• Он также упоминает, что если возникнут вопросы или непонимание, то можно задавать их сразу.

00:52 Выдуманная история о разработке Android-приложения

• Дмитрий рассказывает историю о том, как разработчики пытались создать Android-приложение, но столкнулись с проблемами, такими как нечитаемый код, сложно модифицируемый код, хрупкий код и не тестируемый код.
• Они также столкнулись с проблемой не переиспользуемого кода, когда пытались вынести часть функционала в отдельное приложение.

06:52 Принципы программирования и их влияние на архитектуру

• Дмитрий объясняет, что принципы программирования, такие как структурное программирование, объектно-ориентированное программирование и принципы SOLID, помогают справиться с этими проблемами.
• Он также упоминает Роберта Мартина, известного идеолога в программировании, который сформулировал эти принципы и их влияние на проектирование приложений.

08:22 Принципы SOLID

• Первый принцип - принцип единственности ответственности, утверждает, что каждый класс должен выполнять одну задачу.
• Второй принцип - принцип открытости-закрытости, говорит о том, что классы должны быть открыты для расширения и закрыты для модификации.
• Третий принцип - принцип постановки Барбары Лисков, утверждает, что функции, использующие базовый тип, должны иметь возможность использовать подтипы этого типа.
• Четвертый принцип - принцип разделения интерфейсов, говорит о том, что лучше иметь много маленьких интерфейсов, чем один большой.

17:19 Примеры применения принципов SOLID

• Пример с эрия менеджером, который считает площадь фигур, но не учитывает подтипы фигур.
• Пример с плеером-контроллером, который зависит от абстрактного интерфейса плеера-дата-сорса.
• Пример с модулями в андроид-приложении, где модель, вью и контроллер взаимодействуют между собой.

25:02 Модул вью контроллер

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

32:00 Модул вью презент

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

36:00 Тестирование и депенси инжек

• В этом примере показаны тесты для модели и презента, которые выполняются даже без эмулятора на компьютере.
• Для тестирования презента используется инъекция зависимости через конструктор, что позволяет избавиться от зависимостей на андроид.
• В тесте используется анонимная имплементация экзекьютора, которая выполняет код на том же потоке.

44:43 Тестирование презента

• Обсуждение тестирования презента и его зависимости от модели.
• Создание юнит-теста для презента, который проверяет, что при клике на ячейку презент передает информацию в модель.

53:41 Использование фреймворка зависимости

• Обсуждение использования фреймворка зависимости для Android приложений.
• Демонстрация использования аннотации инжект для добавления зависимости в дерево зависимости.
• Создание компонента для определения, куда будет инъекктиться презент.
• Создание модуля для определения, куда будет инъекктиться бэкграунд экзекьютор.
• Использование аннотации синглтон для указания, что каждый раз будет использоваться один и тот же инстанс мейн трек экзекьютора.

01:06:52 Обзор архитектуры Android

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

01:14:50 Тестирование и взаимодействие с базой данных

• В видео также обсуждаются тесты и взаимодействие с базой данных, используя компоненты, такие как лайф сайк, вью модель и рум.
• Лайф сайк позволяет делегировать логику из активити или фрагмента в контроллер, а вью модель представляет данные в удобном для отображения виде.
• Рум позволяет взаимодействовать с базами данных удобным способом.

01:24:48 Обзор кода и использование лайф даты

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

01:30:48 Взаимодействие с лайф датой

• Лайф дата наследуется от класса мьюта был лайф дата, который обеспечивает взаимодействие с лайф датой.
• Лайф дата используется для подписки на изменения и обновления данных.

01:36:46 Использование дата-бандингов

• В видео демонстрируется использование дата-бандингов для подписки на изменения в лайф дате.
• Это позволяет избежать кода в активити и фрагменте и обеспечивает более четкое разделение бизнес-логики.
• Однако, дата-бандинги имеют некоторые недостатки, такие как медленная сборка и неочевидное поведение при неправильном синтаксисе.

01:44:14 Принципы и архитектура Android

• Обсуждение принципов и архитектуры Android, включая разделение на слои, независимость от фреймворков и баз данных, и использование интерфейсов для взаимодействия между слоями.
• Упоминание о клин-архитектуре, которая была представлена Робертом Мартином и позже развита Фернандо Сиджесом.

01:53:12 Пример кода с использованием клин-архитектуры

• Демонстрация кода, который использует библиотеку для избегания вызова findViewById и аннотации для вызова Butter Knife.
• Обсуждение использования интерфейсов для взаимодействия между слоями и использования репозитория для абстракции данных.
• Упоминание о последних версиях кода, которые были переписаны и используют набор колбаков для взаимодействия с репозиторием и юс-кейсами.