Кому потрібні сингли в PHP?
Зауважте, що майже всі заперечення проти синглів виходять з технічних позицій - але вони також ДУЖЕ обмежені у своєму обсязі. Спеціально для PHP. Спочатку я перерахую деякі причини використання синглів, а потім проаналізую заперечення проти використання синглів. По-перше, люди, які їм потрібні:
- Люди, які кодують велику рамку / кодову базу, яка буде використовуватися в багатьох різних середовищах, повинні будуть працювати з раніше існуючими, різними рамками / кодами, з необхідністю реалізації багатьох різних, мінливих, навіть примхливих запитів від клієнтів / начальників / керівництво / керівники підрозділів.
Дивіться, однотонний малюнок є самовключним. Після закінчення однокласного класу є жорстким для будь-якого коду, до якого ви його включаєте, і він діє точно так, як ви створили його методи та змінні. І це завжди той самий об’єкт у заданому запиті. Оскільки його не можна створити двічі для двох різних об'єктів, ви знаєте, що є однотонним об’єктом у будь-якій точці коду - навіть якщо синглтон вставлений у дві, три різні, старі, навіть спагеті кодові бази. Тому це полегшує з точки зору цілей розробки - навіть якщо в цьому проекті працює багато людей, коли ви бачите одиночний ініціалізацію в одній точці в будь-якій заданій кодовій базі, ви знаєте, що це, що робить, як це так, і про стан, в якому він знаходиться. Якби це був традиційний клас, вам потрібно було б відслідковувати, де вперше створений цей об’єкт, які методи викликалися в ньому до цього моменту в коді та його конкретний стан. Але киньте туди синглтон, і якщо ви скинули належні методи налагодження та інформації та відстеження в синглтон, кодуючи його, ви точно знаєте, що це таке. Таким чином, це полегшує людям, яким доводиться працювати з різними базами коду, з необхідністю інтегрувати код, який був зроблений раніше з різними філософіями, або зроблений людьми, з якими ви не маєте контакту. (тобто, постачальник-проект-компанія-що б там не було більше, немає нічого підтримки). це полегшує людям, яким доводиться працювати з різними базами коду, з необхідністю інтегрувати код, який був зроблений раніше з різними філософіями, або робиться людьми, з якими ви не маєте контакту. (тобто, постачальник-проект-компанія-що б там не було більше, немає нічого підтримки). це полегшує людям, яким доводиться працювати з різними базами коду, з необхідністю інтегрувати код, який був зроблений раніше з різними філософіями, або робиться людьми, з якими ви не маєте контакту. (тобто, постачальник-проект-компанія-що б там не було більше, немає нічого підтримки).
- Люди, яким потрібно працювати з сторонніми API , службами та веб-сайтами.
Якщо ви придивитесь ближче, це не надто відрізняється від попереднього випадку - сторонні API, сервіси та веб-сайти - це як зовнішні, ізольовані кодові бази, над якими у вас немає контролю. Все може статися. Отже, за допомогою одиночного сеансу / класу користувача ви можете керувати будь-яким видом сеансу / авторизації від сторонніх постачальників, таких як OpenID , Facebook , Twitter та багато іншого - і ви можете робити ВСІ водночас із об’єкта SAME Singleton - який є легкодоступним, у відомому стані в будь-який момент будь-якого коду, до якого ви підключите його. Ви навіть можете створити кілька сеансів для декількох сторонніх API / служб для користувача SAME на власному веб-сайті / програмі та робити все, що ви хочете зробити з ними.
Звичайно, все це також може бути в тон з традиційними методами, використовуючи звичайні класи та об'єкти - улов тут є, одинарніше акуратніше, акуратніше, а тому через це керованість / тестування легше порівняно з традиційним використанням класу / об’єкта в таких ситуаціях.
- Люди, яким потрібно робити швидкий розвиток
Глобальна поведінка одинаків полегшує побудову будь-якого коду з рамкою, на якій є колекція синглів, щоб побудувати, тому що, коли ви добре сконструюєте свої однотонні класи, легко встановити встановлені, зрілі та встановлені методи може використовуватися в будь-якому місці і в будь-який час, послідовно. Щоб дозріти ваші заняття, потрібен певний час, але після цього вони є міцними і стійкими, корисними. Ви можете мати стільки методів в одиночному виконанні всього, що ви хочете, і, хоча це може збільшити слід пам'яті об'єкта, це приносить набагато більше економії часу, необхідного для швидкої розробки - метод, який ви не використовуєте в одному заданому екземплярі додаток можна використовувати в іншому інтегрованому, і ви можете просто заштрихувати нову функцію, про яку клієнт / начальник / менеджер проекту вимагає лише декількох модифікацій.
Ви отримуєте ідею. Тепер перейдемо до заперечень одинаків та нечесного хрестового походу проти чогось корисного :
- Найперше заперечення полягає в тому, що це ускладнює тестування.
І справді, це певною мірою, навіть якщо це можна легко пом'якшити, вживши належних запобіжних заходів та кодуючи підпрограми налагодження у ваших сингтонах З усвідомленням того, що ви будете налагоджувати одиноку. Але бачте, це не надто відрізняється від будь-якої іншої філософії / методу / шаблону кодування, яка існує там - це просто те, що одинаки є відносно новими і не широко поширеними, тому сучасні методи тестування закінчуються порівняно несумісними з ними. Але це не відрізняється в будь-якому аспекті мов програмування - різні стилі вимагають різних підходів.
Один момент, який заперечує, заперечує те, що він ігнорує той факт, що розроблені додатки не для "тестування", а тестування - не єдина фаза / процес, що переходить у розробку додатків. Програми розроблені для виробничого використання. І як я пояснив у розділі "кому потрібні одиночні кнопки", одиночні кнопки можуть вирізати ВЕЛИКУ угоду від складності необхідності змусити код працювати З І ВНУТРИ багато різних баз коду / додатків / сторонніх послуг. Час, який може бути втрачено на тестування, - це час, отриманий на розробку та впровадження. Це особливо корисно в цю епоху сторонніх аутентифікацій / застосувань / інтеграцій - Facebook, Twitter, OpenID, багато інших і хто знає, що далі.
Хоча це і зрозуміло - програмісти працюють у дуже різних обставинах залежно від їх кар’єри. А людям, які працюють у порівняно великих компаніях з визначеними відділами, які комфортно і без певної приреченості скорочення / скорочення бюджету та супутньої необхідності створюють багато певного програмного забезпечення / додатків, що супроводжують необхідність робити багато речей із великою кількістю різних матеріалів дешева / швидка / надійна мода, одинаки можуть здатися не потрібними. І це може бути навіть неприємністю / перешкодою для того, що вони ВЖЕ мають.
Але для тих, кому потрібно працювати в брудних окопах "спритного" розвитку, що мають реалізувати багато різних запитів (іноді необгрунтованих) від свого клієнта / менеджера / проекту, одинаки - це заощаджувальна благодать із пояснених раніше причин.
- Ще одне заперечення полягає в тому, що слід пам'яті вище
Оскільки для кожного запиту від кожного клієнта буде новий синглтон, це може бути запереченням для PHP. При погано побудованих та використаних одиночних кнопках слід пам'яті програми може бути вищим, якщо додаток обслуговується багатьма користувачами в будь-якій точці.
Хоча це справедливо для будь-якого підходу, який ви можете використовувати під час кодування речей. Питання, які слід задати: чи не потрібні методи, дані, які зберігаються та обробляються цими однотонними? Оскільки, якщо вони потрібні для багатьох запитів, що надходять до програми, то навіть якщо ви не використовуєте одиночні кнопки, ці методи і дані будуть представлені у вашій програмі в тій чи іншій формі через код. Отже, все стає питанням, скільки пам’яті ви будете економити, коли ініціалізуєте традиційний об’єкт класу 1/3 в обробку коду та знищите його на 3/4.
Дивіться, якщо це зробити так, питання стає зовсім неактуальним - не повинно бути зайвих методів, даних, що містяться в об'єктах у вашому коді, будь-коли - незалежно від того, використовуєте ви одноразові чи ні. Таким чином, це заперечення проти одиночних класів стає насправді веселим, тому ВИМОГАЄМО, що в об’єктах, створених із класів, якими ви користуєтесь, будуть зайві методи, дані.
- Деякі недійсні заперечення на зразок "робить неможливим / важчим підтримання кількох з'єднань баз даних"
Я навіть не можу почати розуміти це заперечення, коли всім потрібно підтримувати декілька підключень до бази даних, кілька виборів баз даних, кілька запитів баз даних, безліч наборів результатів у заданому синглетоні, просто зберігаючи їх у змінних / масивах у синглтоні, поки вони потрібні. Це може бути так само просто, як зберігати їх у масивах, хоча ви можете придумати будь-який метод, який ви хочете використовувати для цього. Але давайте розглянемо найпростіший випадок, використання змінних та масивів у заданому синглетоні:
Уявіть, що нижче знаходиться всередині даної бази даних одиночне:
$ this -> connection = array (); (неправильний синтаксис, я просто набрав це так, щоб дати вам зображення - правильне оголошення змінної є загальнодоступним $ connections = array (); його використання - це $ this-> connection ['connectionkey'] природно)
Ви можете налаштувати та зберігати декілька з'єднань у будь-який момент у масиві таким чином. І те саме стосується запитів, наборів результатів тощо.
$ this -> query (QUERYSTRING, 'queryname', $ this-> connection ['particulrconnection']);
Який може просто зробити запит до вибраної бази даних із вибраним з'єднанням і просто зберігати у вашому
$ this -> результати
масив з ключем 'ім'я запиту'. Звичайно, для цього вам потрібно буде закодувати метод запиту - що тривіально.
Це дозволяє підтримувати практично нескінченну кількість (стільки, скільки дозволяють обмеження ресурсів,) різних підключень до бази даних та наборів результатів стільки, скільки вам потрібно. І вони доступні для будь-якого фрагмента коду в будь-якій точці будь-якої заданої кодової бази, до якої цей однотонний клас був інстанційований.
КУРСУ, природно, вам потрібно буде звільнити набори результатів і з'єднання, коли вони не потрібні, але це само собою зрозуміло, і це не характерно для одиночних клавіш або будь-якого іншого методу / стилю / концепції кодування.
На цьому етапі ви можете побачити, як ви можете підтримувати декілька з'єднань / станів із сторонніми додатками чи послугами в одному синглонті. Не так інакше.
Коротше кажучи, зрештою, однотонні візерунки - це лише ще один метод / стиль / філософія, з яким можна запрограмувати, і вони такі ж корисні, як і будь-які інші, коли їх використовують у правильному місці, у правильному порядку. Що нічим не відрізняється.
Ви помітите, що в більшості статей, в яких сингли забиті, ви також побачите посилання на те, що "глобали" є "злими".
Давайте зіткнемося з цим - будь-що, що не використовується належним чином, зловживається, не використовується, є злом. Це не обмежується будь-якою мовою, будь-якою концепцією кодування, будь-яким методом. Кожного разу, коли ви бачите, як хтось видає бланкетні висловлювання на зразок "X - це зло", біжіть від цієї статті. Швидше за все, що це продукт обмеженої точки зору - навіть якщо точка зору є результатом багаторічного досвіду в чомусь конкретному, - що, як правило, є результатом занадто багато роботи в заданому стилі / методі - типовому інтелектуальному консерватизмі.
Для цього можна навести нескінченні приклади, починаючи від «глобальних злих» до «іфрам - це зло». Ще близько 10 років тому, навіть пропонування використання рамки в будь-якій програмі було єресью. Потім приходить Facebook, iframes скрізь, і дивись, що сталося - iframes вже не такі злі.
Ще є люди, які вперто наполягають на тому, що вони «злі» - а іноді й з поважної причини - але, як бачите, є потреба, якщо рамки заповнюють цю потребу і працюють добре, і тому весь світ просто рухається далі.
Першочерговим надбанням програміста / кодера / програмного інженера є вільний, відкритий та гнучкий розум.