Sobes.tech
Назад к вопросам
Junior — Middle
88

Объясните отличия подходов Active Record и Data Mapper при работе с базами данных.

Ответ от нейросети

sobes.tech AI

Active Record и Data Mapper — два популярных паттерна для работы с базами данных, отличающиеся ответственностью объектов:

  • Active Record: объект модели содержит как данные, так и методы для сохранения, обновления и удаления этих данных в базе. То есть, модель напрямую связана с таблицей базы данных и умеет сама себя сохранять.

    Пример: класс User имеет методы save(), update(), delete(), которые взаимодействуют с БД.

  • Data Mapper: разделяет бизнес-логику и логику доступа к данным. Объекты модели не знают о базе данных, а отдельный слой (mapper) отвечает за преобразование объектов в записи базы и обратно.

    Это повышает тестируемость и позволяет менять слой хранения без изменения модели.

Пример:

// Active Record
class User {
    public $id;
    public $name;
    public function save() {
        // SQL insert/update
    }
}

// Data Mapper
class User {
    public $id;
    public $name;
}

class UserMapper {
    public function save(User $user) {
        // SQL insert/update
    }
}

Active Record проще и быстрее для небольших проектов, Data Mapper лучше для сложных систем с четким разделением ответственности.