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

Почему в резюме указал SOLID среди навыков?

2.3 Middle🔥 121 комментариев
#Python Core

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

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

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

SOLID — это не отдельный навык, а принципы проектирования

Я указал SOLID в резюме потому, что это фундаментальные принципы объектно-ориентированного проектирования, которые я активно применяю в повседневной разработке. Это не инструмент или язык программирования, а набор проверенных практик, которые отличают опытного разработчика от новичка.

Что такое SOLID?

SOLID — это аббревиатура из пяти принципов, сформулированных Робертом Мартином (Uncle Bob):

S — Single Responsibility Principle (SRP) Каждый класс или функция должна иметь одну, хорошо определённую ответственность. Это упрощает тестирование, переиспользование и поддержку кода.

class User:
    def __init__(self, name, email):
        self.name = name
        self.email = email

class UserValidator:
    def validate_email(self, email):
        return "@" in email

class UserRepository:
    def save(self, user):
        pass

Вместо того, чтобы один класс занимался валидацией, сохранением и бизнес-логикой, каждый класс отвечает за одно.

O — Open/Closed Principle (OCP) Класс должен быть открыт для расширения, но закрыт для модификации. Это достигается через наследование и полиморфизм.

from abc import ABC, abstractmethod

class PaymentMethod(ABC):
    @abstractmethod
    def pay(self, amount):
        pass

class CreditCard(PaymentMethod):
    def pay(self, amount):
        return f"Paid {amount} with Credit Card"

class PayPal(PaymentMethod):
    def pay(self, amount):
        return f"Paid {amount} with PayPal"

Добавлять новые способы оплаты легко, не меняя существующий код.

L — Liskov Substitution Principle (LSP) Производные классы должны беспроблемно подставляться вместо базовых классов. Контракт базового класса не должен нарушаться.

class Bird(ABC):
    @abstractmethod
    def move(self):
        pass

class Sparrow(Bird):
    def move(self):
        return "Flying"

class Penguin(Bird):
    def move(self):
        return "Swimming"

Оба класса соответствуют контракту Bird, хотя движутся по-разному.

I — Interface Segregation Principle (ISP) Клиент не должен зависеть от интерфейсов, которые не использует. Лучше иметь много специализированных интерфейсов, чем один универсальный.

class Printer(ABC):
    @abstractmethod
    def print(self, doc):
        pass

class Scanner(ABC):
    @abstractmethod
    def scan(self):
        pass

class SimplePrinter(Printer):
    def print(self, doc):
        pass

class MultiFunctionDevice(Printer, Scanner):
    def print(self, doc):
        pass
    def scan(self):
        pass

D — Dependency Inversion Principle (DIP) Зависимости должны быть от абстракций, а не от конкретных реализаций. Это позволяет легко менять реализацию и тестировать.

class DatabaseService:
    def get_user(self, user_id):
        pass

class UserService:
    def __init__(self, database: DatabaseService):
        self.database = database
    
    def get_user_info(self, user_id):
        return self.database.get_user(user_id)

Почему это важно для Python-разработчика?

  • Чистота кода: SOLID помогает писать код, который легче понимать и поддерживать
  • Тестируемость: Принципы SOLID упрощают написание unit-тестов
  • Масштабируемость: Код становится более модульным и гибким
  • Командная работа: Все разработчики в команде говорят на одном языке
  • Долговечность: Такой код требует меньше рефакторинга

Примеры применения в реальных проектах

from dataclasses import dataclass
from abc import ABC, abstractmethod
from typing import List

@dataclass
class Order:
    id: str
    items: List[str]
    total: float

class NotificationService(ABC):
    @abstractmethod
    def send(self, message: str) -> None:
        pass

class EmailNotification(NotificationService):
    def send(self, message: str) -> None:
        print(f"Email: {message}")

class SlackNotification(NotificationService):
    def send(self, message: str) -> None:
        print(f"Slack: {message}")

class OrderProcessor:
    def __init__(self, notifier: NotificationService):
        self.notifier = notifier
    
    def process_order(self, order: Order) -> None:
        print(f"Processing order {order.id}")
        self.notifier.send(f"Order {order.id} processed")

Вывод

Указание SOLID в резюме показывает, что я разбираюсь в проектировании, создаю чистый и поддерживаемый код, и готов работать над долгосрочными проектами. Это не просто теория — это практические навыки, которые применяю ежедневно.

Почему в резюме указал SOLID среди навыков? | PrepBro