Мобильное приложение под Android для управления проектами. В приложении можно просматривать, создавать и редактировать, рабочие пространства, проекты и задачи, а также отмечать выполнение задач напрямую из списка задач.
Note
Этот проект – всего лишь попытка сделать нечто большое. Тут осталось ещё много работы, но кто её будет делать? Впрочем, это уже совсем другая история.
- Язык программирования: Kotlin;
- Clean Architecture с применением паттерна MVVM;
- Dependency Injection с применением фреймворка Dagger 2;
- База данных: SQLite (библиотека Room);
- RecyclerView для работы со списками;
- Kotlin Coroutines для асинхронной работы с данными.
- Навигационное меню
- Рабочее пространство
- Проекты
- Задачи
- Участники
- Действия
- Создание рабочего пространства
- Создание рабочего проекта
- Создание задачи
- Редактирование рабочего пространства
- Редактирование рабочего проекта
- Редактирование задачи
Общий план дизайна окон приложения:
Детальный разбор окон приложения
Дизайн окон авторизации и регистрации:
Дизайн разделов рабочего пространства: проекты, задачи, участники.
Дизайн раздела действий рабочего пространства и выпадающих меню:
Дизайн навигационного меню и окна приглашений в рабочее пространство:
Дизайн окон создания рабочего пространства, проекта и задачи:
Дизайн окон редактирования рабочего пространства, проекта и задачи:
Дизайн окон приглашения в рабочее пространство / проект:
Дизайн окна страницы пользователя и её редактирования:
Дизайн окон настроек пользователя:
Дизайн окон уведомлений пользователя и настроек приложения:
Warning
В приложении реализована малая часть из того, что представлена на макете с дизайном приложения. Макет с дизайном отражает лишь мое видение как должно было получиться.
При проектировании приложения был использован подход Clean Architecture.
Подробное описание слоёв Clean Architecture
-
Представление (Presentation Layer). Этот слой отвечает за отображение данных пользователю и обработку пользовательского ввода. Он содержит элементы интерфейса пользователя (
Activity,Fragment) и презентеры (Presenter), которые отвечают за взаимодействие с остальными слоями.-
Базовые классы (base). В этом компоненте находятся базовые классы, реализующие основную логику, которая используется во многих других классах
Activity, Fragment илиViewModel. -
Адаптеры (adapters). В этом компоненте находятся адаптеры для списков. Адаптер – это мост между набором данных и объектом, использующим эти данные. Также адаптер отвечает за создание View-компонента для каждой единицы данных из набора.
-
Декораторы (base). В этом компоненте находятся декораторы – классы, позволяющие декорировать каждый отдельный элемент списка.
-
Слушатели (listeners). В этом компоненте находятся классы, реализующие логику обработки событий для взаимодействия со списками.
-
-
Окна (activities). В этом компоненте находятся все классы
Activity.Activityслужит точкой входа для взаимодействия приложения с пользователем, а также отвечает за то, как пользователь перемещается внутри приложения или между приложениями. Фрагменты позволяют разделять пользовательский интерфейс (UI) на отдельные блоки, привнесли модульность и возможность повторно использовать UIActivity. -
Фрагменты (fragments). В этом компоненте находятся все классы
Fragment.- Главная (main). В этом компоненте находится главный фрагмент раздела рабочего пространства.
- Создание сущностей (create). В этом компоненте находятся фрагменты для создания сущностей.
- Редактирование сущностей (edit). В этом компоненте находятся фрагменты для редактирования сущностей.
- Разделы (sections). В этом компоненте находятся фрагменты разделов рабочего пространства (проекты, задачи, участники и действия).
-
-
Бизнес-логика (Domain Layer). Этот слой содержит основную бизнес-логику приложения. Он определяет модели данных, правила бизнес-логики и интеракторы (
Interactors), которые обрабатывают запросы из представления.-
Репозиторий (repository). В этом компоненте находятся интерфейсы для управления данными. Их используют классы из компонента
usecaseпо одному методу на каждый отдельный классusecase. От них наследуются классы для управления данными в data-слое. -
Пользовательский сценарий (usecase). В этом компоненте находятся классы, выполняющие какую-то одну функцию. Это позволяет передавать в класс
ActivityилиFragmentтолько те функции, которые он реально использует. -
Модели (models). В этом компоненте находятся все классы-сущности, используемые всеми слоями.
-
-
Хранилище данных (Data Layer). В этом слое находится код для доступа к данным, таким как базы данных или API. Репозитории (
Repositories) отвечают за извлечение и сохранение данных.-
Репозиторий (repository). В этом компоненте находятся классы для управления данными, наследуемые от интерфейсов из репозитория domain-слоя.
-
Хранилище данных (storage).
-
Интерфейсы (interfaces). В этом компоненте находятся интерфейсы для управления данными, от которых можно наследовать классы, реализующие конкретную логику управления данными: работать с данными локальной базы данных, с данными на сервере и т.д.
-
Память (memory). В этом компоненте находятся классы и переменные для хранения данных в оперативной памяти.
-
Преобразование классов (mapper). В этом компоненте находятся классы, реализующие преобразования одного класса в другой.
-
Модели (models). В этом компоненте находятся все классы-сущности, хранящие данные в оперативной памяти.
-
-
База данных (db). В этом компоненте находятся классы для управления локальной базой данных.
-
SharedPreferences (sharedprefs). В этом компоненте находятся классы для работы с постоянным хранилищем Android, который хранит данные в виде пары ключ-значение.
-
Room (room). В этом компоненте находятся классы для работы с локальной базой данных
SQLite.
-
-
-
А это у нас схема ER-модели локальной базы данных:
Ниже представлено три скриншота окон запущенного приложения:
- Боковая панель
- Окно с задачами рабочего пространства
- Окно создания рабочего пространства












