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