Connect with us

Разработка

Чистая архитектура на Android и iOS

Применение принципа чистой архитектуры в разработке для Android и iOS.

Анна Гуляева

Опубликовано

/

     
     

Понятие чистой архитектуры пошло из одноименной статьи Роберта Мартина 2012 года. Оно заключает в себе несколько принципов:

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

Отражение этих принципов в архитектуре программного обеспечения можно представить следующим образом: posts/2012-08-13-the-clean-architecture/CleanArchitecture.jpg В этой схеме слои обозначают:

  • Entities — бизнес-логика, общая для всех приложений, а в случае отдельного приложения — наиболее базовые бизнес-объекты.
  • Use Cases — логика приложения, “сценарии применения”, которые управляют потоком данных из предыдущего слоя.
  • Interface Adapters — адаптеры между Use Cases и внешним миром. Этот слой конвертирует данные в формат, подходящий для внешних слоев, например Web или базы данных, а также превращает внешние данные в формат для внутренних слоев.
  • Frameworks and Drivers — внешний слой, содержащий фреймворки, инструменты, базы данных и так далее. В этом слое код должен связываться с предыдущим слоем, но не влиять в значительной степени на внутренние слои.

Все слои связаны правилом зависимости — Dependency Rule, которое гласит, что в исходном коде все зависимости могут указывать только вовнутрь. Например, ничто из внешнего круга не может быть упомянуто кодом из внутреннего круга. Это относится к функциям, классам, переменным или любым другим сущностям. Сам Uncle Bob говорит, что эту схему можно изменять: добавлять или убирать слои, но основным правилом в архитектуре приложения должно всегда оставаться Dependency Rule.

Чистая архитектура в iOS-разработке

Для iOS-разработки чистая архитектура реализована в модели VIP или VIPER, которая позиционируется как замена шаблону MVC. Модель VIP (View — Interactor — Presenter) выглядит следующим образом: Clean Swift (VIP) Flow Diagram Подробнее о каждом компоненте:

  • Models — класс, содержащий структуры Request, Response, ViewModel;
  • Router — простой компонент, передающий данные между viewControllers;
  • Worker — компонент для управления запросами и ответами API/CoreData, а также передачи информации об успехе или неудаче к Interactor.
  • Interactor — посредник между Worker и Presenter. Сначала он связывается с ViewController, который передает все параметры запроса, необходимые для Worker. До передачи данных к Worker, выполняется проверка, и если все в порядке, Worker возвращает ответ, и Interactor передает ответ на Presenter.
  • Presenter —  Response от Interactor форматируется в ViewModel и передается на ViewController. Presenter отвечает за логику отображения и решает, как данные будут представлены пользователю.
  • Configurator — “суперкласс”, который инициализирует все упомянутые выше компоненты.

Примеры проектов с чистой архитектурой на iOS:

Чистая архитектура в Android-разработке

Схему чистой архитектуры Android-приложений предложил разработчик Фернандо Сехас. Выглядит она так: clean_architecture_android Внутренним слоем в этом случае является Domain Layer, который хранит всю бизнес-логику. В этом же слое находятся и все use cases и реализации. Этот слой является чистым модулем Java без Android-зависимостей. При связи с этим слоем все внешние компоненты используют интерфейсы. clean_architecture_domain В Presentation Layer происходит логика, связанная с представлениями и анимациями. Он использует модель Model View Presenter, но шаблон может быть другим, например, MVC или MVVM. Фрагменты и активности в этом слое — это представления, в которых происходит только UI-логика и изменение формата данных. Presentors в этом слое формируются из interactors (use cases), которые производят работу вне основного потока UI Android и возвращаются с данными, которые обрабатываются в View. clean_architecture_mvp Data Layer передает все данные через UserRepository, который использует Repository Pattern со стратегией, выбирающей разные источники данных в зависимости от условий. Например, при поиске пользователя по ID с условием существования пользователя в кэше источником данных будет кэш, в ином случае для получения данных будет отправлен запрос в облако. Источник данных прозрачен для клиента, которого волнует, будут ли получены данные. clean_architecture_data Пример приложения, созданного автором, чтобы проиллюстрировать свои схемы, можно посмотреть здесь. Другие примеры чистой архитектуры на Android:

  • Easy MVP — фреймворк для создания приложений по принципу чистой архитектуры;
  • Шаблон для создания приложения с чистой архитектурой на Kotlin;
  • Пример приложения на Java.

 

Комментарии
Если вы нашли опечатку - выделите ее и нажмите Ctrl + Enter! Для связи с нами вы можете использовать info@apptractor.ru.
Advertisement
Click to comment

You must be logged in to post a comment Login

Leave a Reply

Новости

Интересные материалы: 17.07

В нашей новой подборке визуальный калькулятор, проблемные A/B-тесты и сравнение гибридов.

AppTractor

Опубликовано

/

Автор:

Весь день мы собираем лучшие материалы о разработке и маркетинге технологий, стартапов, мобильных приложений и игр для iOS и Android из самых разных источников:

Комментарии
Продолжить чтение

Медиа

Podlodka #68: Rust

Является ли Rust убийцей С++? Смогут ли мобильные разработчики писать на нём кроссплатформенные библиотеки? Что лучше – Rust или Go? Созрел ли Rust для того, чтобы использоваться в продакшене?

AppTractor

Опубликовано

/

Автор:

Podlodka

Podlodka за фундаментальный подход, и чтобы найти ответы на эти холиварные вопросы мы вместе с энтузиастом Rust Степаном Кольцовым основательно обсудили различные аспекты этого языка программирования. Историческая справка, ключевые фичи языка и его недостатки, особенности синтаксиса, экосистема Rust, возможности его применения во фронтеде и мобильной разработке — благодаря опыту гостя выпуск получился максимально емким и информативным.

Комментарии
Продолжить чтение

Разработка

Дневники разработчиков: Snek Fite — «змейка» с непрямым управлением

Привет, меня зовут Михаил, я разработчик и вообще не занимаюсь приложениями-играми. Snek Fite — это первый опыт (ну, вернее, первый удачный: проект находится в играбельном состоянии и количество игроков понемногу растет).

AppTractor

Опубликовано

/

Автор:

Итак, браузерная игра Snek Fite. С одной стороны, это действительно игра — по клетчатому полю движутся разноцветные змеи, пытаясь укусить друг друга за хвост. Кто стал самым длинным к концу последнего хода — того и тапочки.

Геймплей выглядит так:

С другой стороны, это симуляция программирования. Такая, где не нужно непосредственно писать код, но обучать свою змею придется — в игре нет прямого управления змейкой с клавиатуры, мышки или любого другого контроллера. Вместо этого — экран настроек, который вызывает умиление у любого человека, который пробовал делать свою игру в конструкторе со сценарным программированием (типа Scirra Construct 2, RPG Maker, да хоть Aurora Toolset).

Так выглядит экран настройки змеи. Девять полей, объекты, которые можно расставить по полю, логические операторы (must, must not и optional). Программирование для тех, кто не умеет писать код.

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

А вот такой сложный паттерн (занимает три поля) дает команду твоей змее преследовать чужой хвост, если тот находится на расстоянии максимум в две пустых клетки от головы твоей рептилии.

В общем, это далеко не развлекуха с мобилочки на вечер. По крайней мере, для большинства. Snek Fite — игра по-своему хардкорная, и затягивает избранных. Зато если затянула — то можно стать таким, как наш игрок с никнеймами Zerro/Undefined (у него две змеи). Он сделал иллюстрированное руководство, где разобрал поведение змей, выигрышные тактики, частые вопросы и сделал много другой полезной работы. Руководство на английском.

Сейчас его змеи на первом и втором месте общего топа:

В игре сейчас есть три игровых режима — это Дуэль, Снейкоцид и Батл-рояль. В первом две змеи соревнуются друг с другом, во втором четыре, в третьем сразу девять.

Игра всегда заканчивается по истечении 1000 ходов. То есть примерно за минуту.

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

Игра — идейный наследник классической Snake Battle, которую российская компания Gamos выпустила в 1992. Геймплей был схожим, только онлайн-баталий не было — всё-таки это была эра MS-DOS и флоппи-дисководов.

Геймплей старой игры:

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

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

В общем, если заинтересовал опыт — то пишите в комментариях, о чем хотелось бы почитать (матчмейкинг, разработка на VUE, организация базы данных для игры, выигрышные тактики, опыт продвижения или что-то еще). Сама игра живет по адресу snek.app.

Комментарии
Продолжить чтение

Медиа

Руководство по ориентированному на пользователя проектированию

Ориентированное на пользователя проектирование (User-Centered Design) – далеко не новая концепция.  Это стратегия проектирования и процесс, в котором потребностям, желаниям и ограничениям конечных пользователей продукта уделяется обширное внимание на каждой стадии процесса проектирования.

AppTractor

Опубликовано

/

Автор:

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

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

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

Скачать ее можно на сайте: https://www.appsee.com/ebooks/the-playbook-of-user-centered-app-making.

Комментарии
Продолжить чтение

Реклама

Наша рассылка

Нажимая на кнопку "Подписаться" вы даете согласие на обработку персональных данных.

Вакансии

Популярное

X
X

Спасибо!

Теперь редакторы в курсе.