Должен ли я предварительно заполнить атрибуты объекта или выполнить вызов БД для каждого из его атрибутов? - PullRequest
1 голос
/ 19 ноября 2011

Я вижу два основных способа обработки экземпляров классов в PHP.

Возьмем, к примеру, что у нас есть пользователи в системе.

Метод 1

$user_id = 5;
$u = new User($user_id); // fills in any and all info from the database
echo $u->getName();
echo $u->getEmail();

Метод 2

$user_id = 5;
echo Users::getName($user_id); // makes a call to the database
echo Users::getEmail($user_id); // makes a call to the database

В этом подходе подразумевается, что у меня есть класс Users, в котором бизнес-логика связана с пользователями. Он имеет прямой доступ к классу User, который может выполнять операции CRUD, вызывая MySQL.

Ответы [ 2 ]

1 голос
/ 19 ноября 2011

Метод 3

$user = UserDao::findById($id);
$user->getName();

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

0 голосов
/ 19 ноября 2011

Выполнение запроса для получения каждого свойства стоит дорого, если вы все равно собираетесь получить каждое свойство. Таким образом, ваш метод 1 или более аккуратный подход @ Амира был бы лучшим выбором в этом случае. Это компромисс, получите «все» с одним доступом к БД на случай, если вам это нужно, вместо хранения большого количества вещей в памяти, которые вам могут не понадобиться. Ваши два подхода - получить все сразу или получите каждый, как вам нужно.

Есть в основном между вариантами получите это, если у вас еще нет этого, всегда получайте «общие» вещи и другие биты, когда и когда они вам нужны.

или смесь всегда получает это, а затем и другие биты, если у вас их еще нет.

Нет жесткого и быстрого правила. Вы должны посмотреть, какие операции выполняются над объектом и насколько они параллельны. т.е. сеанс 2 может изменить атрибуты person1, пока сеанс1 смотрит на него. Приведет ли это к ошибке, путанице или не имеет значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...