Skip to content

DmitryArbuzov/DemoProject

Repository files navigation

Общеe

Небольшой демо проект для собеседований.
Архитектура: MVP+Router+SOA.
Многое намеренно упрощено. В некоторых таких местах есть комментарии.
Намеренно не использована ни одна внешняя зависимость. В некоторых местах есть комментарии с указанием, чтобы я использовал из внешних зависимостей.

UI

  • Реализована многоколоночная динамическая верстка на UICollectionView.
  • Поддерживаются все размеры экранов и все ориентации устройств.
  • Поддерживается темная тема.
  • Поддерживаются динамические шрифты (Accessibility).
  • Поддерживаются интерфейсы с написанием справа налево.

Т.к. в проекте я не использовал внешние зависимости, код верстки может показаться несколько громоздким.
В проде совершенно оправданно использовать какой-либо DSL поверх нативного API Autolayout наподобие SnapKit.

Архитектура

Последние 4 года в hh.ru команды под моим руководством при разработке использовали паттерн VIPER. За это время создано более 200 новых VIPER модулей. Считаю, что в момент, когда принималось решение использовать VIPER, это было оправданно. VIPER описывает понятные границы ответственностей. Был удобен в т.ч. для последовательного разбиения Legacy MVC модулей на части (выделение роутера, интерактора).

Несомненно, VIPER для ряда случаев создает излишние накладные расходы.
В данный момент для нового проекта я предпочту скорее MVVM-C + RxSwift (Combine в будущем)

Сетевой клиент

Представлена самая простая реализация. Ее можно усложнять в плане поддержки отмены запросов, разных способов энкодинга, добавить поддержку хидеров авторизации, retrier, ssl pinning и т.д. С другой стороны для всего этого можно просто взять Alamofire, где все это есть. Но, само собой, об Alamofire будет знать лишь один класc. Тот, который будет реализовывать интерфейс NetworkClient. Т.е. при необходимости слезть с Alamofire переписать нужно будет только один класс (и его прямые зависимости). Любые другие части проекта никак не будут знать про Alamofire.

Что далее?

Планирую постепенно реализовать еще 2 варианта демо проекта:

  1. MVVM-C, RxSwift, все другие необходимые внешние зависимости.
  2. Вариант на SwiftUI+Combine.

About

Демо проект без внешних зависимостей

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages