¿Cómo organiza y administra sus objetos auxiliares como el motor de base de datos, la notificación al usuario, el manejo de errores, etc. en un proyecto orientado a objetos basado en PHP?
Digamos que tengo un CMS PHP grande. El CMS está organizado en varias clases. Algunos ejemplos:
- el objeto de la base de datos
- Gestión de usuarios
- una API para crear / modificar / eliminar elementos
- un objeto de mensajería para mostrar mensajes al usuario final
- un controlador de contexto que te lleva a la página correcta
- una clase de barra de navegación que muestra botones
- un objeto de registro
- posiblemente, manejo de errores personalizado
etc.
Estoy lidiando con la eterna pregunta, cómo hacer que estos objetos sean más accesibles para cada parte del sistema que los necesita.
mi primer apporach, hace muchos años, fue tener una $ application global que contuviera instancias inicializadas de estas clases.
global $application;
$application->messageHandler->addMessage("Item successfully inserted");
Luego cambié al patrón Singleton y una función de fábrica:
$mh =&factory("messageHandler");
$mh->addMessage("Item successfully inserted");
pero tampoco estoy contento con eso. Las pruebas unitarias y la encapsulación se vuelven cada vez más importantes para mí y, en mi opinión, la lógica detrás de los globales / singletons destruye la idea básica de POO.
Luego, por supuesto, existe la posibilidad de darle a cada objeto una serie de punteros a los objetos auxiliares que necesita, probablemente la forma más limpia, ahorradora de recursos y amigable con las pruebas, pero tengo dudas sobre la mantenibilidad de esto a largo plazo.
La mayoría de los frameworks PHP que he investigado utilizan el patrón singleton o funciones que acceden a los objetos inicializados. Ambos buenos enfoques, pero como dije, no estoy contento con ninguno.
Me gustaría ampliar mi horizonte sobre los patrones comunes que existen aquí. Busco ejemplos, ideas adicionales y punteros hacia los recursos que discuten este de un largo plazo , en el mundo real perspectiva.
Además, estoy interesado en escuchar acerca de enfoques especializados, de nicho o simplemente extraños al problema.
$mh=&factory("messageHandler");
tiene sentido y no produce ningún beneficio de rendimiento. Además, está obsoleto en 5.3.