Skip to content

vladislavternovskiy/TestApp-iOS

Repository files navigation

TestApp-iOS

Даный пример кода реализует CLEAN архитектуру(как минимум частично, ибо код копипастился за пару часов на коленке, и час ушел на удаление корпоративных решений).

Первое что хотелось бы отметить - это решение проблемы большого и не гибкого AppDelegate. Для этого был создан класс AppServiceComposite(инстанс AppDelegate) в котором регистрируются инстансы типа AppService(appDelegate). В AppServiceComposite имплементируются все нужные методы AppDelegate и в этих методах комбайнятся зареганные сервисы, и для каждого сервиса выполняется унжный метод делегата. AppServiceComposite регистрируется в AppServiceAssembly и резолвается в init() методе AppDelegate при помощи MainAssembler. Таким образом при добавлении новых требований мы можем создавать новые сервисы и регать их AppServiceAssembly и вызывать их методы в appDelegate.

Все зависимости вынесены в DI часть, для каждой логической сущности используется свой Assembly и регистрируется в DI-ке. Связи между объектами завязаны на интерфейсах, а не на реализации. Это позволяет коду быть более гибким и поддержуемым.

Для байндингов используется RxSwift в тандеме ViewModel. Во ViewModel выделено два основных интерфейса: Input & Output, что позволяет инкапсулировать ненужную имплементацию и сделать взаимосвязь View и VeiwModel более понятной. (Сделано максимально криво, и я это понимаю, но времени выделил мало, потому "маємо шо маємо" :D )

Вьюконтроллеры регистрируются в DI, и резолваются при переходах по сегвеях, что упрощает навигацию в приложении (тут бы Router прикрутить)

В приложении есть пример тестов(масло масляное) с моками.

Используется SwiftLint с большим колличеством правил которые позволяют комманде девелоперов писать более читаемый код, придерживаясь общепринятых норм

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published