Я использую 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
)? Должен ли я вообще не использовать этот основной вид? На мой взгляд, вместо того, чтобы выполнять какие-либо вычисления, я должен просто выполнять те, что находятся внутри самого класса? У меня создалось впечатление, что я должен использовать только один класс, чтобы описать стадо. Если бы я создал новую стаю, я бы использовал этот класс. Если бы я хотел получить доступ, я бы просто заполнил его с помощью фабрики. Но если я заполню его с помощью фабрики, как насчет дополнительных данных, содержащихся в моем главном представлении? Может ли кто-нибудь помочь мне разобраться в этом? Благодаря!
Да, это имеет смысл. Часть меня чувствует, что я слишком анализирую это. Я просто хотел бы сделать это правильно в первый раз и не повторить его позже. – Jeff