← Назад к вопросам

Что такое KISS?

1.0 Junior🔥 151 комментариев
#Архитектура и паттерны

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

KISS (Keep It Simple, Stupid) — Принцип простоты

KISS — это принцип разработки: простое решение лучше сложного. Выбирай самый простой подход, который решает текущую проблему, без излишних функций и абстракций.

Суть принципа

// Переусложнение (нарушение KISS)
class UserManager {
    private $logger;
    private $cache;
    private $database;
    private $eventDispatcher;
    
    public function __construct(...$dependencies) {
        // Кучу зависимостей для простой операции
    }
    
    public function getUser($id) {
        // 50 строк кода для получения пользователя
    }
}

// Простое решение (KISS)
class User {
    public static function find($id) {
        return DB::table('users')->find($id);
    }
}

User::find(1); // Просто!

Примеры KISS

Валидация:

// Переусложнение
class ComplexValidator implements ValidatorInterface {
    public function validate($data) {
        // 100 строк с абстракциями
    }
}

// KISS
function validateEmail($email) {
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        throw new InvalidEmailException();
    }
}

Логирование:

// Переусложнение
class Logger implements LoggerInterface {
    // 200 строк кода
}

// KISS
file_put_contents('app.log', date('Y-m-d H:i:s') . ' ' . $msg . "\n", FILE_APPEND);

KISS vs Оверинжиниринг

// ЗАДАЧА: получить пользователей по возрасту

// Оверинжиниринг (50 строк, 4 файла)
interface UserRepositoryInterface {}
class EloquentUserRepository implements UserRepositoryInterface {}
class UserService {
    public function __construct(UserRepositoryInterface $repo) {}
    public function getByAge($age) {}
}

// KISS (2 строки)
Route::get('/users/{age}', function($age) {
    return User::where('age', $age)->get();
});

Когда усложнять?

Начинай с простого. Усложняй только когда:

  1. Требования меняются часто

    • Есть 3 способа платежа и нужен 4-й? Тогда добавляй интерфейс PaymentProcessor
    • А не раньше!
  2. Код используется в 3+ местах

    • Одна функция используется в 5 контроллерах? Выноси в сервис
    • При 1-2 местах копируй спокойно
  3. Нужна специфичная производительность

    • 100k пользователей и медленно? Добавляй кэш
    • При 1000 пользователей не нужен

Правило 3

Не спеши с абстракцией:

  • 1 раз повторилось — OK
  • 2 раза повторилось — OK
  • 3 раза повторилось — выноси в функцию

Не создавай классы на будущее. Не добавляй функции может потребуется. Код эволюционирует вместе с требованиями.

Практические советы

  1. Напиши просто первый раз
function getUser($id) {
    return DB::table('users')->find($id);
}
  1. Добавь абстракцию когда нужна
interface UserRepository {}
  1. Не усложняй для "правильной архитектуры"

KISS vs DRY

Иногда конфликтуют. Решение: Rule of Three.

  • 1 дублирование: OK
  • 2 дублирования: OK
  • 3 дублирования: выноси

Лучше написать простой, понятный код, чем гибкий, но непонятный.

Вывод

KISS = Простая архитектура + Легкое понимание + Меньше багов