Инкапсуляция данных и поток данных в PHP - PullRequest
0 голосов
/ 02 февраля 2012

Я перестраиваю веб-сайт, на котором я работаю, и который предоставляет таблицы приливов.Я делаю это с Zend Framework и пытаюсь сделать его максимально ориентированным на объект.Я думал о потоке / процессе, который будет происходить, когда посетитель запрашивает таблицу приливов из местоположения, и о том, как он возвращается.

Я придумал 2 разных «типа» объектов для использования, которые помогутв этом процессе.Первый - это в основном объект helper , который использует Zend Framework.Второй - объект data (из-за отсутствия лучшего слова) для инкапсуляции данных, которые передаются между помощниками.Вот примерное представление о потоке, о котором я думаю:

  • RequestHandler
    • Получает массив для запроса от контроллера сайта или от контроллера API.
    • Создает «объект данных» с именем QueryData и заполняет его всей информацией о запросе.
    • Передает QueryData объект в LocationHandler .
    • Возвращает объект ResponseData , который был возвращен ему из LocationHandler .
  • LocationHandler
    • Получает QueryData объект от RequestHandler
    • Работает ли поиск местоположения и создает LocationData объект для хранения его в.
    • Передает QueryData и LocationData объекты различным помощникам, таким как TideHandler или WeatherHandler , которые возвращают конкретные данные для исходныхquery.
    • Возвращает массив ResponseData объекты, которые содержат ответы, возвращаемые ему от каждого из конкретных помощников (TideHandler, WeatherHandler и т. д.)
  • TideHandler
    • Получает QueryData и LocationData объекты от LocationHandler .
    • Работает ли использование объектов данных для поиска данных приливов.Создает объект ResponseData для его сохранения.
    • Возвращает ResponseData в LocationHandler .

Делая все так, я получаю ООП "подключи и играй", который позволяет мне добавить к этому гораздо проще (я думаю?).Извините за длинное объяснение, приведшее к моему вопросу ...

Вопрос:

Является ли обычной практикой инкапсуляция наборов данных в объект (а не вмассив) для передачи другим объектам, которые выполняют над ним функции и отправляют новые / измененные объекты?Какие существуют другие решения или шаблоны, обеспечивающие аналогичный уровень функциональности и гибкости?

1 Ответ

1 голос
/ 02 февраля 2012

Я думаю, что то, что вы делаете, является идеальной практикой, хотя имейте в виду, что ваши объекты Data - это просто объекты, так что вы можете обнаружить, что встраивание некоторых общих методов в эти объекты или в их родительские объекты весьма удобно. , Для себя я бы сказал, что если все, что вам нужно, это сами данные для передачи, то используйте массив. Если вы хотите хранить данные в чем-то, что может манипулировать данными или работать с ними иным образом, используйте объект:

class MyData {
    protected $data = array();

    public function __construct($in_data)
    {
        $this->data = self::prepare_data($in_data);
    }

    protected static function prepare_data($data)
    {
        // do something to the data
    }
}

$myData = new MyData($_REQUEST['data']);
$myData->GetTideData(); // Etc.

«общая практика» - это на самом деле просто стиль - если подход (например, передача объектов данных) работает лучше для вас, сделайте это. Если массив лучше подходит для вашей ситуации, пойдите с этим.

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