Як ви організовуєте та керуєте своїми допоміжними об'єктами, такими як двигун бази даних, сповіщення користувачів, обробка помилок тощо в об'єктно-орієнтованому проекті на основі PHP?
Скажіть, у мене великий PHP CMS. CMS організовано в різні класи. Кілька прикладів:
- об’єкт бази даних
- управління користувачами
- API для створення / зміни / видалення елементів
- об’єкт обміну повідомленнями для відображення повідомлень кінцевому користувачеві
- обробник контексту, який переведе вас на потрібну сторінку
- клас панелі навігації, на якому показані кнопки
- об’єкт реєстрації
- Можливо, власна робота з помилками
тощо.
Я маю справу з вічним питанням, як найкраще зробити ці об’єкти доступними для кожної частини системи, яка цього потребує.
мій перший підхід, багато років тому мав створити глобальний додаток $, який містив би ініціалізовані екземпляри цих класів.
global $application;
$application->messageHandler->addMessage("Item successfully inserted");
Потім я перейшов на шаблон Singleton і заводську функцію:
$mh =&factory("messageHandler");
$mh->addMessage("Item successfully inserted");
але я теж не задоволений цим. Експериментальні тести та інкапсуляція стають для мене дедалі важливішими, і в моєму розумінні логіка глобалів / синглів руйнує основну ідею ООП.
Тоді, звичайно, є можливість надати кожному об'єкту ряд покажчиків на потрібні йому помічники, мабуть, самий чистий, ресурсозберігаючий і тестуючий спосіб, але я маю сумніви в ремонтопридатності цього в перспективі.
Більшість фреймів PHP, які я розглядав, використовують або однотонний візерунок, або функції, що мають доступ до ініціалізованих об'єктів. Обидва чудові підходи, але, як я вже сказав, я задоволений ні одним.
Я хотів би розширити свій кругозір щодо того, які тут існують загальні закономірності. Я шукаю приклади, додаткові ідеї і покажчики по напрямку до ресурсів , які обговорюють це з довгостроковим , в реальному світі точки зору.
Також мені цікаво почути про спеціалізовані, нішеві або просто дивні підходи до цього питання.
$mh=&factory("messageHandler");
безглуздо і не дає ніякої користі від продуктивності. Крім того, це застаріле в 5.3.