

Этот проект представляет собой свободную реализацию чистой архитектуры, представленная в моей книге «Чистая архитектура для Android». Это нативный проект Android, написанный в Котлине. Это демонстрирует ключевые принципы, представленные в книге и то, как они применяются к реальному проекту.
Я постараюсь поддерживать этот проект в курсе и использовать его, чтобы продемонстрировать сильные стороны архитектуры: масштабируемость , тестируемость и гибкость, когда речь идет о выборе решений из сторонних сторон.
Простота
« Сложность, представленная здесь, является излишкой! »
Я согласен. Если бы это был окончательный проект, к которому никогда не будет добавлено никакой новой функциональности, то чистая архитектура была бы слишком сложной для этого. Тем не менее, реальность такова, что мобильный проект редко является окончательным. Отзывы пользователей, маркетинговые требования, новые технологии - все эти факторы и другие приводят к постоянным изменениям практически во все проекты. Итак, то, что теперь может показаться слишком большой сложностью, вознаградит нас, когда наступит время для перемен. Это будет, когда чистая архитектура сияет.
В качестве примечания: в некотором смысле я намеренно преувеличил этот проект, представляя различные технологии. Цель состояла в том, чтобы показать, как, даже в реальных сценариях, где проект, возможно, вырос со временем, чтобы включить более чем одно технологическое решение, архитектура все еще работает.
Мапперы как классы против функций расширения картирования
При картировании между моделями у нас есть несколько вариантов. Основное решение - между классами Mapper и функциями расширения картирования.
В то время как функции расширения более кратко, используя их для ограничения картирования нашего выбора структур тестирования (например, Mockito не может загрязнять статические функции).
Как насчет инъекции функций расширения Mapper? Мы могли бы сделать это. Тем не менее, это почти полностью устраняет преимущества краткости. Это также усложняет навигацию на реализацию.
Итак, я выбрал немного более многословных бетонных классов Mapper.
Пропустить компоненты архитектуры Google
Самая большая проблема с компонентами архитектуры Google заключается в том, что они протекают подробности Android в презентационный уровень. Это мешает презентационному слою быть по -настоящему агностичным пользовательским интерфейсом.
Другая проблема с компонентами архитектуры заключается в том, что они дают слишком большую ответственность перед ViewModel. Они делают его постоянным состоянием, которое он не владеет, что приводит к потенциальным ошибкам синхронизации данных.
По этим причинам, по -прежнему следуя MVVM, этот проект опирается на потоки Kotlin, а не на живую , и реализует чистые видовые модели, а не на Google.
Насмешливая структура
В этом проекте используются и Mockito-Kotlin, так и Mockk, чтобы продемонстрировать, как будет выглядеть каждое использование.
Мои личные предпочтения остаются Микто-Котлин . Я считаю, что код легче читать и следовать при его использовании. Во время написания, судя по количеству звезд в каждом хранилище, индустрия, похоже, склоняется к Мокеку.
Меня спросили об использовании подделок . Я исследовал подделки и обнаружил, что они слишком многословны и слишком дороги, чтобы поддерживать.
Структура впрыска зависимости
Критическая часть большинства современных приложений, инъекция зависимостей (DI) помогает нам получить объекты, которые создают наше приложение. Это также помогает управлять их объемом. Самым популярным выбором в мире Android являются рукоятка (который построен на вершине кинжала) и коин.
Рукоять был выбран по двум основным причинам:
XML против JetPack Compose
Почему не оба? У меня все еще есть много проблем с JetPack Compose . Несмотря на это, для меня было важно показать, что представленная архитектура работает хорошо, независимо от выбранного механизма пользовательского интерфейса. В качестве упражнения я приглашаю вас попытаться заменить слой пользовательского интерфейса от Compose на XML или наоборот без обновления уровня презентации.
Чистая архитектура для Android на Amazon
Чистая архитектура в блоге Clean Coder
Вклад в этот проект приветствуются. Пожалуйста, не стесняйтесь сообщать о любых вопросах или вилке, чтобы внести изменения и поднять запрос на тягу.
Этот проект распространяется в соответствии с условиями лицензии MIT. Смотрите License.md для деталей.