В данной статье рассмотрим один из способов работы со сложностью, возникающей в ходе разработки ПО. Рассмотрим принципы SSOT, FRP (Combine), SRP и дойдём до архитектурного шаблона «Мрак в Моделях» (далее MM), являющегося комбинацией этих принципов. Примеры будут для iOS на Swift, но всё описанное, конечно, применимо не только на платформах Apple.
Часть 1. Как я пришёл к описываемому архитектурному шаблону
1.1. Разработка без комплексов, или архитектурный антишаблон «Massive View Controller»
Многие в iOS начинали свой путь с размещения практически всего кода в UIViewController'ах, т.к. любой экран в iOS есть ни что иное, как экземпляр UIViewController. Так куда класть код, если не в этот самый видимый экран? Кнопки-то ведь на экране? Следовательно, и реакции на кнопки должны быть там же. С этого и начнём.
Создадим крошечное приложение, позволяющее начинать звонок двумя способами:
- ввести номер в поле ввода и нажать на кнопку «Начать звонок»
- принять входящий звонок как аудио через интерфейс CallKit
Выглядеть оно будет минималистично:
