9 принципов проектирования для написания чистого кода (с примерами Swift)
Чистый код — это не просто работающий код. Это код, который легко читать, тестировать и поддерживать. Ниже представлены 9 ключевых принципов проектирования, которые помогают писать чистый и поддерживаемый код. Примеры приведены на языке Swift.
1 DRY — Don’t Repeat Yourself (Не повторяй себя)
Суть: Избегай дублирования логики. Централизуй повторяющийся код, чтобы облегчить поддержку.
❌ Плохо:
✅ Хорошо:
2 KISS — Keep It Simple, Stupid (Делай проще)
Суть: Не переусложняй решения. Избегай избыточных абстракций и ненужных уровней логики.
❌ Плохо:
✅ Хорошо:
💡 Делай просто, пока нет реальной необходимости усложнять.
3 YAGNI — You Aren’t Gonna Need It (Тебе это не понадобится)
Суть: Не реализуй функционал «на будущее». Пиши только то, что нужно сейчас.
❌ Плохо:
✅ Хорошо:
💡 Код, написанный «на всякий случай», почти всегда усложняет проект.
4 LOD — Law of Demeter (Закон Деметры)
Суть: Общайся только с ближайшими «соседями». Избегай длинных цепочек вызовов.
❌ Плохо:
✅ Хорошо:
💡 Лучше инкапсулировать доступ к внутренним свойствам в отдельные методы.
5 SRP — Single Responsibility Principle (Принцип единственной ответственности)
Суть: Каждый класс или структура должна выполнять только одну задачу.
❌ Плохо:
✅ Хорошо:
💡 Делегируй разные обязанности разным компонентам.
6 OCP — Open/Closed Principle (Открыт для расширения, закрыт для модификации)
Суть: Класс должен быть открыт для расширения, но закрыт для изменений.
❌ Плохо:
✅ Хорошо:
💡 Добавление нового типа оплаты не требует изменения PaymentProcessor.
7 LSP — Liskov Substitution Principle (Принцип подстановки Барбары Лисков)
Суть: Подкласс должен заменять родительский класс без нарушения логики программы.
❌ Плохо:
✅ Хорошо:
💡 Подкласс не должен ломать ожидания, заданные базовым классом.
8 ISP — Interface Segregation Principle (Принцип разделения интерфейсов)
Суть: Лучше создавать маленькие, специализированные интерфейсы, чем один большой и универсальный.
❌ Плохо:
✅ Хорошо:
💡 Пусть объекты реализуют только те методы, которые им действительно нужны.
9 DIP — Dependency Inversion Principle (Принцип инверсии зависимостей)
Суть: Модули верхнего уровня не должны зависеть от модулей нижнего уровня. Оба должны зависеть от абстракций.
❌ Плохо:
✅ Хорошо:
💡 Это упрощает тестирование, потому что можно подставить мок-реализацию.
🧠 Заключение
Соблюдение этих принципов не делает код автоматически идеальным — но делает его понятным, предсказуемым и безопасным для изменений. Хороший код — это не только про работу программы, но и про удобство чтения для следующего разработчика (или для вас самого через 3 месяца).