Понимание того, как внедрить объектные зависимости - PullRequest
0 голосов
/ 12 июня 2010

У меня есть объект, который загружает экземпляр другого объекта в методе.

$survey   = new survey;

$question = new question($survey);

$question->load($question_id);

class question  {

public function __construct(&$survey)
{   
    $this->survey = $survey;
}   

public function load ($id)
{   
    // now a question is loaded
    // want to load the survey that this question is in
    $this->survey->load($this->get('survey_id')); // ** survey_id is a field in the questions table
    // now $this->survey object has all the info about the survey this question is in
}   

private function get($name)
{   
    // returns $name, if isset() from array that load() sets
}    }

Хотя это напугало мой мозг, потому что кажется, что $ survey должны войти в $ question, уже будучи завершеннымобъект.Но как мне это сделать, если я не знаю, какой параметр survey_id загружать, пока я не нахожусь в объекте?Я обновляю сайт, и самая сложная часть замусорена с этой проблемой.TIA - Ганс.

1 Ответ

1 голос
/ 12 июня 2010

Edit: Я только что заметил, что вы упомянули, что вы столкнулись с этим в существующем коде. То, что я сказал ниже, все еще может относиться к решению вашей проблемы, но на самом деле это может не иметь непосредственного конструктивного использования. :) К сожалению, нам нужно было бы увидеть намного больше кода, чтобы помочь вам с вашей проблемой, поскольку то, что вы показали нам до сих пор, странно.


Кажется, вы построили свои классы наизнанку.

Опросы обычно определяются как наборы вопросов.

Следовательно, не должен ли ваш класс Survey содержать и ссылаться на Вопросы, а не наоборот?

Вы можете сохранить их отношения в таблице ссылок, что позволит Surveys искать свои Вопросы, а также позволяет Вопросам искать, в каких Surveys они находятся. Создайте методы доступа в каждом классе для поиска зависимости в связать таблицу и вернуть либо идентификаторы для объектов, либо сами объекты. Этот метод делает объекты менее тесно связанными друг с другом.

(С распространением этого на пользователей, отвечающих на вопросы, все становится более интересным. Если бы я делал это, я бы создал класс для Ответа каждого пользователя (каждый пользователь получает один Ответ), который содержит Ответы. Ответ ссылается на опрос, Ответы каждый ссылается на вопрос.)

Вероятно, это не тот случай, когда внедрение зависимостей применимо. DI чаще всего используется, когда фактический класс передаваемого объекта может измениться, или когда внешняя сила может контролировать, какой объект может быть передан. Вы когда-нибудь ожидали, что Surveys будет содержать вещи, которые не являются вопросами? Или что Вопросы когда-нибудь будут существовать внутри чего-то, что не является Обследованием? Или что сила, не связанная ни с чем-либо, связанным с опросами или вопросами, будет манипулировать вопросом? Если вы ответили «нет» на них, то DI, вероятно, не то, что вы хотите здесь.

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