PDO + Singleton: зачем использовать его?

Я читал в Интернете, что многие разработчики используют singleton-шаблон для своих PDO-соединений. [где?]

Я использовал шаблоны singleton раньше (в VB.Net), и я уверен, что это полезно только тогда, когда вам нужно дважды называть экземпляр экземпляра (код примера .NET отсутствует).

В настоящее время я работаю над сайтом электронной коммерции, я бы хотел знать, действительно ли полезно использовать шаблон singleton для моих подключений PDO, поскольку моя архитектура создана таким образом, что каждому сценарию требуется только одно соединение [пример кода, где вы бы не использовали такой синглтон].

Solutions Collecting From Web of "PDO + Singleton: зачем использовать его?"

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

Вы говорите, что ненавидите рамки и что разработчики, которые используют рамки, которые они не разрабатывали, продают контракты на поддержку . Как именно это работает? Код с открытым исходным кодом, документированный FW может поддерживаться любым, кто знает FW. Ваш код может поддерживаться вами .
Кроме того, фреймворки PHP (ну, по крайней мере, основные) OPEN SOURCE . Я знаю, что, исходя из фона VB.NET, вы можете подозревать, что есть уловка, но на самом деле этого не происходит. Все они имеют github repo, источник свободно доступен для копирования и редактирования (в соответствии с лицензией, которая в целом в целом является довольно либеральной). В принципе, у вас есть полный контроль .
И не думайте, что это код второго уровня: Apple (включая основные части своего ядра OSX), Microsoft, Google … все они используют программное обеспечение и фреймворки с открытым исходным кодом. Не только потому, что это легко и быстро развивается, но и из-за концепции проверенной технологии .

К тому же: производительность – это ваша цель, и – если вы ненавидите рамки – почему бы не рассмотреть возможность обучения? Таким образом, вы можете избежать того, чтобы идиотский компилятор скомпилировал ваш код с тем, что не так эффективно, как, возможно, могло быть.
И, конечно же, вы не используете IDE для этого, вы бы либо отправились на Emacs или бабочки, верно?

Emacs butterfly http://www.andreas-wilm.com/images/real_programmers_75p.png

Альтернативным подходом было бы использование структуры, предлагающей расширенные возможности кеширования

Поддержание работоспособности должно быть для вас самым важным, при написании кода:

«Отладка в два раза сложнее записывать код в первую очередь. Поэтому, если вы пишете код настолько умно, насколько это возможно, вы по определению недостаточно умны, чтобы его отлаживать ». – Брайан Керниган

Серверы – зомби-рабы: они не жалуются, и это не является незаконным для их взлома. Разработчики, хотя некоторые руководители проектов, похоже, забывают об этом, не являются ни зомби, ни рабами: они не могут работать 2 недели подряд, а взбитые разработчики незаконны. Даже Стив Балмер знает, что … Разработчики, разработчики, разработчики . Серверные ОС Microsoft являются ресурсоемкими, как и MSSQL, и почти все их программное обеспечение, но заглядывают в их серверную ОС. Существует множество функций, которые служат только для сокращения времени обслуживания, которое требуется вашей системе . Я не болельщик MS, но я полностью понимаю это расстройство. Они не могут победить Linux по цене (потому что это бесплатно), но они могут заманить в компании, продавая систему, которая сократит расходы на системный администратор вдвое. (хотя, ATM, они не получили этого, и IMO, они никогда не будут)


Этот вопрос является одним из многих обманов, плохо подходит для SO и будет закрыт. Однако, прежде чем он будет закрыт / удален, я хотел бы указать вам пару вещей:

Первое :

Поскольку я сейчас работаю над сайтом электронной коммерции, я хотел бы знать, действительно ли полезно использовать одноэлементный шаблон для моих соединений PDO

Нет, никогда.

впрыскивание PHP не способен сохранять состояние объектов между запросами. Сервер получает запрос. Сценарий разбирается, устанавливается соединение с БД, выполняются запросы, ответ отправляется обратно и соединение закрывается . Снова и снова.
Соединения не могут быть сериализованы, они не могут быть сохранены каким-либо образом, формой или формой, поэтому:
С помощью кодирования вы можете использовать инъекцию и в то же время обеспечить, чтобы вы только подключались к БД один раз за запрос.
Статика – это глобальные перетаскивания, теперь: используете ли вы глобальные переменные, если вы могли бы передать аргумент? Предоставляя вам пользу от сомнений, я полагаю, что ваш ответ отрицательный .
Несколько оставшихся преимуществ синглтонов, которые остаются, не стоят усилий, необходимых для написания достойных, работающих, модульных тестов для вашего одноэлементного кода.

Почему :

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

Тогда ваш код не очень масштабируемый. Я знаю, что это простое заявление, и страшное клише, но дело тут только в этом. Точно так же, как и ваше предположение, что каждый сценарий нуждается только в одном соединении, может быть правдой прямо сейчас , но кто скажет, что это всегда так?
Рефакторинг БД, добавление поддержки другого адаптера, тестирование (как упоминалось ранее) становятся все более трудными, поскольку вы будете писать код и, не заметив этого, новый код будет адаптирован для поддержки синглтона .
Это означает, что вы напишете код, чтобы сохранить то, что было, потому что вы работаете над своими проблемами, плохое дизайнерское решение.

Подумайте об этом так:
Вы строите дом и решаете построить конкретный пилар в коридоре, потому что там вы повесьте свои вешалки, и вы никогда не измените это. Но Singleton подразумевает, что вы пишете OO-код. Все дело в том, что вы можете повторно использовать код. Теперь: вы честно думаете, что сможете продать свой дом так же легко, если бы у него была неподвижная вешалка для пальто, как это было бы, если бы этого не было? конечно нет!

И я уверен, что это полезно только тогда, когда вам нужно дважды вызвать экземпляр экземпляра.

Если это так: используйте другой шаблон или выньте лист из книги Symfony и сделайте соединение доступным для любого объекта, которому он нужен, используя контейнер (компонент инъекции зависимостей стоит поиска Google).

Тестирование:

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