Como você organiza e gerencia seus objetos auxiliares, como mecanismo de banco de dados, notificação de usuário, tratamento de erros e assim por diante, em um projeto orientado a objetos baseado em PHP?
Digamos que eu tenha um grande CMS PHP. O CMS está organizado em várias classes. Alguns exemplos:
- o objeto de banco de dados
- gerenciamento de usuários
- uma API para criar / modificar / excluir itens
- um objeto de mensagem para exibir mensagens ao usuário final
- um manipulador de contexto que leva você para a página certa
- uma classe de barra de navegação que mostra botões
- um objeto de registro
- possivelmente, tratamento de erros personalizado
etc.
Estou lidando com a questão eterna, como tornar melhor esses objetos acessíveis a cada parte do sistema que precisa deles.
minha primeira abordagem, há muitos anos, era ter um $ application global que contivesse instâncias inicializadas dessas classes.
global $application;
$application->messageHandler->addMessage("Item successfully inserted");
Em seguida, mudei para o padrão Singleton e uma função de fábrica:
$mh =&factory("messageHandler");
$mh->addMessage("Item successfully inserted");
mas também não estou feliz com isso. Testes de unidade e encapsulamento se tornam cada vez mais importantes para mim, e em meu entendimento a lógica por trás de globais / singletons destrói a ideia básica de OOP.
Então, é claro, há a possibilidade de dar a cada objeto um número de ponteiros para os objetos auxiliares de que ele precisa, provavelmente a maneira mais limpa, com economia de recursos e amigável para testes, mas tenho dúvidas sobre a sustentabilidade disso a longo prazo.
A maioria das estruturas de PHP que examinei usa o padrão singleton ou funções que acessam os objetos inicializados. Ambas as abordagens são boas, mas, como disse, não estou feliz com nenhuma delas.
Eu gostaria de ampliar meu horizonte sobre quais padrões comuns existem aqui. Estou à procura de exemplos, ideias adicionais e ponteiros para os recursos que discutem isso de um longo prazo , do mundo real perspectiva.
Além disso, estou interessado em ouvir sobre abordagens especializadas, de nicho ou totalmente estranhas para o problema.