Плюсы и минусы передачи данных через внедрение зависимостей против включения их в $ _SESSION - PullRequest
2 голосов
/ 04 февраля 2012

Я пишу небольшое некоммерческое веб-приложение и мне интересно, как передавать данные из одного фрагмента кода в другие.В частности, я хочу выводить различные сообщения пользователю в зависимости от обстоятельств («вы вошли в систему», «вышли из системы», «статус обновлен» и т. Д.).(На данный момент я не вижу случая, когда мне нужно было бы хранить несколько сообщений в памяти, но это не очень важно.) Поэтому я мог бы структурировать свой код с помощью переменной $_SESSION['message'], или я мог бы систематически передавать экземплярclass Message или даже строковой переменной из одного php-файла в следующий.

Я не уверен, есть ли веские причины использовать один подход, а не другой.

РЕДАКТИРОВАТЬ: «Куски кода», на которые я ссылаюсь выше, являются контроллерами MVC, которые решают, какую функцию выполнять и что отображать.Затем они перенаправляют на фронт-контроллер, поэтому экземпляр меняется.Затем передний контроллер загружает изображения.

Ответы [ 3 ]

2 голосов
/ 04 февраля 2012

То, что вы описываете, это не модель внедрения зависимостей, это модель Singleton (как, например, передать один экземпляр класса вокруг). Внедрение зависимостей заключается в передаче того, что вам нужно для каждого определенного объекта / функции для запуска, то есть если у вас есть функция аутентификации для ваших пользователей, вам потребуется соединение с базой данных , пользователь и пароль . Так что ваш код может выглядеть так:

function auth($db_conn, $user, $pass) {

В вашем случае для отображения сообщений пользователю я бы использовал сессионный подход.

2 голосов
/ 04 февраля 2012

Вопрос не имеет большого смысла для меня.

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

В случае, если вы говорите о передаче сообщений между частями кода в одном и том же экземпляре PHP-скрипта, сеансы вообще не используются.

2 голосов
/ 04 февраля 2012

Передача объекта Message позволит вам изменить способ реализации без необходимости настраивать каждый фрагмент кода, который использует сообщения. Использование переменной $_SESSION напрямую свяжет вас с вашей реализацией.

Обычно я стараюсь избегать использования $_SESSION напрямую в любом месте приложения, кроме как в процедуре «загрузки». Это глобальная переменная, и они по природе являются злыми.

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