2014-10-28 1 views
0

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

ответ

1

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

+0

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

Смежные вопросы