Где следует размещать код, отвечающий за взаимодействие с базой данных?

Где должна быть размещена логика работы с базой данных: в структурах или в обработчиках? Какой подход рекомендуется: сохранять, обновлять и удалять данные в структурах или же в обработчиках? Например, вот такой код:
  • 14 июля 2024 г. 15:12
Ответы на вопрос 2
Работу с базой данных следует размещать в отдельном слое приложения, так называемом слое доступа к данным (DAL). Этот слой может содержать классы или функции, отвечающие за выполнение запросов к базе данных, сохранение, обновление и удаление данных.

Лучше всего размещать логику работы с базой данных в структурах данных, таких как модели или репозитории. Обработчики (контроллеры) же должны вызывать соответствующие методы структур данных для выполнения операций с базой.

Пример кода для работы с базой данных (используя Python и SQLAlchemy):

```python
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

Base = declarative_base()

class User(Base):
    __tablename__ = 'users'
    
    id = Column(Integer, primary_key=True)
    name = Column(String)
    
engine = create_engine('sqlite:///example.db')
Base.metadata.create_all(engine)

Session = sessionmaker(bind=engine)
session = Session()

# Добавление пользователя
new_user = User(name='John')
session.add(new_user)
session.commit()

# Обновление пользователя
user = session.query(User).filter_by(name='John').first()
user.name = 'John Doe'
session.commit()

# Удаление пользователя
user = session.query(User).filter_by(name='John Doe').first()
session.delete(user)
session.commit()

session.close()
```

Этот пример показывает работу с базой данных SQLite с помощью библиотеки SQLAlchemy. Логика работы с базой данных выделена в структуры данных (в данном случае класс `User`) и выполняется в обработчиках (выполнение операций с базой данных осуществляется в контексте сессии).

Итак, рекомендуется использовать модели или репозитории для работы с базой данных и вызывать их методы из обработчиков для выполнения операций сохранения, обновления и удаления данных.
Надо ли в структурах прописывать логику работу с базой данных или делать это в обработчиках?
От проекта конечно зависит, но часто структуры в отдельном пакете models находятся поэтому логику пишут отдельно, если хочешь можно с интерфейсами сделать как в комменте написали
Похожие вопросы