Ответ
Проверка SOLID во время код-ревью:
1. Single Responsibility (единственная ответственность)
// ❌ Нарушение: класс делает слишком много
class UserManager {
func saveToDatabase() { ... }
func sendEmail() { ... }
func generateReport() { ... }
}
// ✅ Исправление: разделение ответственности
class UserRepository { func save() { ... } }
class EmailService { func send() { ... } }
class ReportGenerator { func generate() { ... } }
2. Open/Closed (открыт для расширения, закрыт для изменений)
protocol PaymentProcessor {
func process(amount: Double)
}
class CreditCardProcessor: PaymentProcessor { ... }
class PayPalProcessor: PaymentProcessor { ... }
// Новый платежный метод добавляется без изменения существующего кода
3. Liskov Substitution (подстановка Лисков)
- Проверяю, что наследники не нарушают контракт базового класса/протокола.
- Наследник должен обрабатывать все случаи, которые обрабатывает родитель.
4. Interface Segregation (разделение интерфейсов)
// ❌ Слишком общий протокол
protocol Worker {
func work()
func eat()
func sleep()
}
// ✅ Специализированные протоколы
protocol Workable { func work() }
protocol Eatable { func eat() }
5. Dependency Inversion (инверсия зависимостей)
// ❌ Зависимость от конкретной реализации
class DataService {
private let database = MySQLDatabase()
}
// ✅ Зависимость от абстракции
protocol Database { func save(data: Any) }
class DataService {
private let database: Database
init(database: Database) { self.database = database }
}
На код-ревью: даю конкретные примеры нарушений и предлагаю варианты рефакторинга.