Pull to refresh

Comments 10

Забыли указать минимальную версию iOS 16, прежде чем красиво расписывать архитектурное чудо. Много у нас приложений в продакшене для iOS 16+?

Для новых проектов мы обычно поддерживаем 2 предыдущие версии iOS. Сейчас актуальная версия 18я, поэтому уже можно.
С проектами в продакшене всё индивидуально, не всегда получается уговорить заказчика отрезать поддержку устаревших версий, но в общем случае это возможно.

Но мы просто не можем рассказать про все аспекты архитектуры в одной статье, поэтому вместе с демо-проектом вы сможете посмотреть DocC туториалы и документацию.

Почему у вас в туториалах используется enum без case? Он же тогда работает как обычная структура

Если речь про `enum Facade` и его вложенные enum это устоявшаяся практика для группировки статических переменных и функций.
Этот подход применяется например в SwiftGen для доступа к ресурсам.
В отличие от структуры enum не содержит дефолтного инициализатора и других лишних функций, которые могут привести к нецелевому использованию сущности.
Вложенные enum позволяют формировать хорошо читаемые пути до функций: Facade.Storages.User.current, что удобнее просто длинного имени. Автодополнение в IDE быстрее подбирает нужный вариант такого пути.

Да, дефолтного инициализатора не будет, но вы все внутри оъявляете статическими функциями и статическими полями - вы и не будете его использовать.

И структуры точно так же можно делать вложенными и писать «Facade.Storages.User.current». Собственно отсюда и вопрос, почему именно enum

вы и не будете его использовать.

Не будем, но это остается потенциально возможно. У enum без cases не будет инициализатора даже на internal уровне, что на 100% исключит вероятность его использования.

В первую очередь вдохновлялись опытом других.
Например, SwiftGen уже упоминал, но даже Apple в Combine тоже предпочли enum - Subscriptions, Publishers

Я бы добавил в список сравнения что-нибудь из UDF, так как для SwiftUI они гораздо популярнее MVC и MVP.

Спасибо за предложение.
Мы планировали продолжить сравнение архитектур. Это только начало.

Интересно узнать, а Clean Architecture применима к Swift? Если да, то почему вы предпочли ей свою вариацию архитектуры. Привет от Flutter-разработчика! :)

Очень сложно представить неприменимую архитектуру. Применимы все, но вопрос стоит в том, насколько "чисто" получится им следовать. Насколько много адаптеров прийдется надстраивать..
Мы обязательно продолжим опыт сравнения и добавим Clean Architecture в репу позже.

Sign up to leave a comment.