1. Принцип единственной ответственности (Single Responsibility Principle - SRP):
- Разделите функции классов так, чтобы каждый класс отвечал только за одну конкретную часть функциональности.
- Разделяйте классы для обработки бизнес-логики, классы для работы с данными, классы для взаимодействия с внешними системами и т. д.
2. Принцип открытости/закрытости (Open/Closed Principle - OCP):
- Используйте полиморфизм и абстракции, чтобы программный код был открыт для расширения новым функционалом, но закрыт для модификации существующего кода.
3. Принцип подстановки Лисков (Liskov Substitution Principle - LSP):
- Все подклассы должны быть взаимозаменяемыми со своими суперклассами, не нарушая работу остальной программы.
- Необходимо следовать контрактам, определенным в суперклассе, и не изменять поведение, которое ожидается от суперкласса.
4. Принцип разделения интерфейса (Interface Segregation Principle - ISP):
- Разделяйте интерфейсы на более мелкие, чтобы клиенты могли реализовывать только те методы, которые им нужны, вместо реализации всех методов одного большого интерфейса.
5. Принцип инверсии зависимостей (Dependency Inversion Principle - DIP):
- Зависимости между классами должны быть основаны на абстракциях, а не на конкретных реализациях.
- Классы должны зависеть от абстракций, а не от конкретных классов.
Пример простого псевдокода REST API:
```python
class UserService:
def get_user(self, user_id: int) -> User:
# Возвращает пользователя по его ID из базы данных
def create_user(self, user_data: dict) -> User:
# Создает пользователя на основе переданных данных и сохраняет его в базе данных
# Возвращает созданного пользователя
def update_user(self, user_id: int, user_data: dict) -> User:
# Обновляет данные пользователя по его ID и сохраняет изменения в базе данных
# Возвращает обновленного пользователя
def delete_user(self, user_id: int) -> None:
# Удаляет пользователя по его ID из базы данных
class UserController:
def __init__(self, user_service: UserService) -> None:
self.user_service = user_service
def get_user(self, user_id: int) -> User:
user = self.user_service.get_user(user_id)
return user
def create_user(self, user_data: dict) -> User:
user = self.user_service.create_user(user_data)
return user
def update_user(self, user_id: int, user_data: dict) -> User:
user = self.user_service.update_user(user_id, user_data)
return user
def delete_user(self, user_id: int) -> None:
self.user_service.delete_user(user_id)
```
В этом примере псевдокода мы разделили функциональность на классы `UserService` и `UserController`. `UserService` отвечает за работу с базой данных и выполнение операций с пользователями, а `UserController` связывает запросы от клиента с соответствующими методами `UserService`. Это демонстрирует принцип единственной ответственности (SRP) и принцип инверсии зависимостей (DIP).