плюсы и минусы создания моей системы аутентификации синглтон-класса - PullRequest
2 голосов
/ 30 марта 2012

Я столкнулся с дилеммой, касающейся ООП-дизайна моего приложения.Должен ли я сделать класс аутентификации синглтоном или нет.Я вижу, что фреймворк Kohana и фреймворк Zend используют свои классы аутентификации как синглтон.Каковы недостатки создания класса аутентификации синглтоном?Какие плюсы?Кроме того, приложение, которое я создаю, будет корпоративным, и его необходимо масштабировать, поэтому будет ли масштабироваться и моя система аутентификации, если она будет одноэлементной?

Ответы [ 4 ]

3 голосов
/ 30 марта 2012

Вот некоторые минусы:

  • чрезвычайно сложно проверить, потому что код привязан к имени класса
  • введение глобального состояния
  • неспособность определить причины для эффекта - несвязанные методы могут влиять друг на друга
  • разброс запросов аутентификации по всей базе кода
  • нарушение LoD

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

Обновление

Вот несколько видео, которые могут вас заинтересовать:

0 голосов
/ 30 марта 2012

Избегайте использования синглтона и используйте его только в том случае, если оборудование имеет ограничение на один объект -> ресурс на приложение. Если вы включите синглтон, вы не сможете обменять класс auth с чем-то другим в вашей системе, и вы будете его использовать. Учтите, что завтра вы можете получить новое требование, в котором говорится, что вам нужно реализовать аутентификацию, используя другую логику, другое соединение и так далее. Кроме того, хотя о том, как проверить вашу систему после использования синглтона, как вы будете издеваться над ней ??

0 голосов
/ 30 марта 2012

Не используйте Singleton! Это не лучше, чем прославленное объектно-ориентированное пространство имен, на самом деле Singleton почти так же плохо, как использование глобальных переменных, и лишь немного лучше, чем использование глобальных библиотек функцийчто само по себе тоже плохо). Лучше отправлять созданный объект вашим классам.

Поскольку объекты PHP 5, передаваемые другим объектам, по умолчанию передаются по ссылке.Они не создают новый экземпляр (если не используют ключевое слово clone).Это позволяет просто передавать любую информацию о сеансе в качестве объекта другим объектам, которые в ней нуждаются.

Лучшее, что я могу порекомендовать, - это создать класс 'Session', который содержит информацию о сеансе.Отправьте этот класс вашим объектам MVC.Это позволяет вам тестировать систему без присутствия Session (или вы можете создать для этого состояние макета).Хотя передача одного объекта другому делает их более связанными, чем идеальными, при условии, что класс достаточно примитивен, его можно легко создать в других системах или частях приложения, использующих те же классы.

Это также делает еголегче переносить состояния или сеансы в любой момент времени, даже в пределах одного запроса.

0 голосов
/ 30 марта 2012

В PHP объект не остается в памяти после завершения запроса.

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

Но разница будет, когда к объекту обращаются несколько раз в одном запросе.,В этом случае синглтон имеет следующие преимущества:

  • Предотвращает создание нескольких избыточных экземпляров, поэтому меньшее использование памяти для запросов.

  • Совместно использует одни и те же данныепри множественном доступе.

Например: функция get_instance Codeigniter является реализацией концепции Singleton, при которой в каждом запросе используется только один экземпляр Codeigniter.

...