oop php, какова лучшая практика для доступа к базе данных?

0

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

какую структуру классов я должен выбрать для базы данных в php?

  1. класс DatabaseObject и один дочерний класс для каждой таблицы, а также класс DatabaseObjectArray, который расширяет ArrayObject и позволяет сразу загружать сразу несколько объектов DatabaseObject. (я должен иметь возможность перебирать его с помощью foreach или аналогичного) DatabaseObject имеет функции load() и store().

  2. класс Database и интерфейс DatabaseObject, где каждая таблица сопоставляется с одним классом, который реализует inteface. База данных может использоваться для загрузки одного объекта за раз или нескольких из массива.

где должен быть выполнен sql?

если я выберу вариант один, у меня будет некоторый дублирующий код между DatabaseObject и DatabaseObjectArray, так лучше ли использовать расширенный класс PDO?

Например, я хочу иметь массив с именем $ condition, а также функцию addCondition ($ key, $ value, $ operator = '='), чтобы я мог сначала определить условия, а затем загрузить() данные в объект. (sql-запрос собран на основе $ условий) Должен ли я определять их в DatabaseObject и DatabaseObjectArray независимо или в расширении PDO?

  1. или, может быть, я должен определить признак DatabaseAccess, который будет использоваться либо в классах таблиц, либо в двух базовых классах варианта 1.
  • 0
    Многие хорошие вопросы порождают определенную степень мнения, основанного на опыте экспертов, но ответы на этот вопрос, как правило, будут почти полностью основаны на мнениях, поскольку существует слишком много способов для достижения этого. «Передовой опыт» также полностью контекстуален и зависит от очень специфических сценариев, кодовой базы и т. Д. Возможно, вам лучше задать хороший вопрос на codereview.stackexchange.com и спросить, хорош ли ваш подход или, возможно, его можно улучшить.
  • 1
    Вопрос основан на мнении. Проблема, с которой вы столкнетесь со многими из этих вопросов «передового опыта» (помимо действительно простых, таких как хеши паролей или нет), заключается в том, что на самом деле нет единого правильного ответа. Я предлагаю вам посмотреть, как Laravel, Symfony и другие фреймворки делают свою работу с БД
Показать ещё 4 комментария
Теги:
oop

1 ответ

2
Лучший ответ

Расширение PDO никогда не является "лучшей практикой". На самом деле это полная противоположность. И черты - всего лишь кодовый запах, поскольку они предназначены для копирования-вставки с помощью интерпретатора.

ИМХО, лучший подход - отделить логику бизнеса и логику персистентности. Например: у вас есть класс, который выполняет пользовательскую логику и отдельный класс, который сохраняет или заполняет экземпляр этого пользовательского класса. Этот шаблон называется преобразователем данных.

В основном настройка выполняется следующим образом:

$user = new Entity\User($id);
$mapper = new Mapper\User($pdo);

$mapper->fetch($user);
if ($user->isBanned() && $user->hasExpiredBan(new DateTimeImmutable)) {
    $user->removeBan();
    $mapper->store($user);
}

В этом случае mapper не расширяет PDO, а вместо этого использует его как зависимость. Что касается того, как делиться одним и тем же экземпляром PDO с несколькими картографами, вы можете посмотреть этот старый пост.

И для простого примера того, как сам транслятор можно реализовать, вы можете посмотреть на этот пример.

  • 0
    Я не виноват, что Ларавел так же популярен, как и он. Но из уважения, чтобы не загрязнять ваш ответ, я потяну комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню