Вхід Реєстрація
Реклама
Ваше рекламне місце
Забронюйте цей слот без конкуренції на обраний період.
Купити рекламу →
Логотип телеграм спільноти - Затишна Галера
Додано 06 січ 2025 🌐 UK

Затишна Галера

@Zatishna_Galera
Кількість підписників: 2 700
Фото: 1,520
Відео: 465
Посилання: 2,020
Опис:
Голова Одеського центру розробки DataArt та Delivery Director, капітан Затишної Галери, ділитимуся: завданнями із співбесід (QA/Delivery/Management), статтями, вакансіями, новинами зі світу IT. Контакт: [email protected] ; Patreon: patreon.com/CozyGalley
Джерело

Затишна Галера | iOSКомпас 🧭1️⃣7️⃣4️⃣ Завдання 174Яка структура SwiftUI-проєкту повинна...

Логотип телеграм спільноти - Затишна Галера Затишна Галера @Zatishna_Galera
352 Охват/переглядів 2026-09-30 08:37 Повідомлення №3002
#iOSКомпас 🧭
1️⃣7️⃣4️⃣ Завдання 174

Яка структура SwiftUI-проєкту повинна бути щоб проєкт не розвалився з ростом?


Доброго здровля мої любі друзі. З вами ваш незмінний ios розробник Сергій з @badlinkschannel. 

Стандартної структури Xcode вистачає на старті. ContentView.swift, кілька папок - і ось уже через три місяці ви не можете знайти, де лежить екран налаштувань, бо він загубився серед 50 інших файлів в одній купі. Щоб проєкт жив довго і щасливо, потрібна система. І бажано з першого дня.

🔣 Головна проблема - групування за типами:

Найпопулярніше, але не завжди вдале рішення - папки Views, Models, ViewModels. Ніби логічно, але коли у Views опиняється 40 файлів, а в Models - 20, ви починаєте витрачати час на пошук. Гірше того, пов'язані сутності розкидані по різних місцях. Щоб зрозуміти, як працює авторизація, потрібно відкрити три папки й зібрати пазл.

🔣 Фічева організація - рятувальний круг:

Набагато зручніше групувати код за функціональністю. Кожна фіча - окрема папка, всередині якої лежить усе необхідне: в'юхи, моделі, в'ю-моделі, кастомні компоненти, специфічні для цієї фічі. Якщо потрібно поправити екран профілю, ви йдете в папку Profile і бачите все, що до нього належить. Жодних блукань проєктом.

🔣 Що винести за межі фіч:

Не все має жити всередині фіч. Є речі, які використовуються по всьому застосунку:

➖ Core: мережа, сховище, базові сервіси та спільна інфраструктура.
➖ UI Components: перевикористовувані кнопки, поля вводу, лоадери. Щоб не писати один і той самий стиль на кожному екрані.
➖ Theme: кольори, шрифти, відступи. Єдине місце, де живе дизайн-система.
➖ Extensions: корисні розширення для стандартних типів.
➖ Resources: асети, локалізація, шрифти.

🔣 ViewModel з людським обличчям:

Кожна в'ю-модель має бути акуратною та передбачуваною. Кілька правил:

➖ @MainActor - для ізоляції UI-стану на головному акторі.
➖ private(set) для стану, який не повинен змінюватися ззовні.
➖ Залежності через ініціалізатор - щоб їх можна було підмінити в тестах.
➖ Методи, які чітко відображають дії користувача.

🔣 Навігація без болю:

Для простих застосунків вистачає вбудованого NavigationStack з navigationDestination. Коли екранів стає багато, можна задуматися про координатор. Окремий об'єкт, який централізовано керує навігацією, може сильно спростити життя, особливо коли потрібно передавати дані між екранами або обробляти диплінки.

🔣 Головне - послідовність:

Будь-яка структура працює краще, якщо її дотримуватися. Найгірше - коли частина коду лежить за фічами, частина - за типами, а частина - взагалі в корені. Оберіть один підхід і дотримуйтеся його від початку до кінця. Нові розробники в команді скажуть дякую.

#️⃣ Організація проєкту - це не про «красиву структуру», а про швидкість розробки та вартість підтримки. Коли на пошук потрібного файлу йде 10 секунд замість 5 хвилин, коли межі між фічами зрозумілі, коли код читається навіть тими, хто бачить його вперше - ось тоді структура працює. І правильна організація папок - один із перших кроків до цього.

@Zatishna_Galera