Лучший способ заполнить объект свойствами, взятыми из базы данных

Я использую PHP 5.4. Я пытаюсь сделать мое приложение более твердым. В настоящее время я просматриваю свои объекты и проверяю, что они следуют SRP. Я застрял в том, как справиться с заполнением моего объекта свойствами, особенно свойствами, которые «расширяют» свойства объекта. Позвольте мне лучше объяснить.

У меня есть класс под названием Flock (да, группа кур — я в сельском хозяйстве). Он состоит из нескольких свойств, которые находятся в flocks Таблица в базе данных: id, member_id, integrator_id, date_placed, date_picked_up, так далее:

<?php
class Flock
{
private $id;
private $member_id;
private $farm_id;
private $integrator_id;
private $comments;
private $production_sq_ft;
private $number_of_houses;
private $avg_effective_age_of_houses;
private $date_placed;
private $date_picked_up;
private $head_started;
private $head_picked_up;
private $pounds_picked_up;
private $pounds_sold;
private $base_rate;
private $performance_rate;
private $fuel_rate;
private $other_rate;
private $feed_pounds_consumed;

public function __construct() {}

//Then a bunch of getters and setters.
}

Моя цель — использовать один и тот же объект для создания и извлечения стада. Тем не менее, в моей базе данных я создал несколько «основных» представлений — представлений, которые объединяют все таблицы поиска и выполняют любые основные вычисления над данными, которые можно выполнить на уровне строк. В этом примере, в моем главном представлении для стада, я присоединился к integrators стол с моим flocks давая мне integrator_name колонка на мой взгляд. То же самое касается members а также farms столы. Я также нашел разницу в днях между date_placed а также date_picked_up давая мне колонку под названием total_time_in_facility, В моей текущей версии этого приложения все эти данные просто хранятся в массиве и доступны с помощью магических методов (__get). Поэтому, если бы я хотел получить имя интегратора, я бы просто использовал $flock->integrator_name, Однако, если бы я использовал Flock класс для заполнения базы данных, я бы не передавал имя интегратора — я бы просто передавал значения, которые я перечислил выше.

Мой вопрос — каков наилучший способ получить эти расширенные данные о стаде? Должен ли я использовать другой класс для обработки этого (например, FlockDetails)? Разве я не должен использовать этот главный вид вообще? Вместо того, чтобы выполнять какие-либо вычисления, на мой взгляд, я должен просто выполнять те, что в самом классе? У меня сложилось впечатление, что я должен использовать только один класс для описания стада. Если бы я создал новое стадо, я бы использовал этот класс. Если бы я хотел получить данные, я бы просто заполнил их, используя фабрику. Но если я заполняю его с использованием фабрики, как насчет дополнительных деталей, содержащихся в моем главном представлении? Может кто-нибудь помочь мне прояснить это? Спасибо!

0

Решение

Ну, я бы, вероятно, имел класс Flock, представляющий одну строку в таблице «flocks», и класс FlockEx, который расширяет класс Flock, добавляя поля, которые вы получаете в результате вычисления в db. Таким образом, когда вы хотите обновить или добавить новое стадо в базу данных, вы используете класс Flock, а когда вы извлекаете поля стада вместе с вычисленными полями, вы используете FlockEx. Имеет смысл?

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]