PHP 기반의 객체 지향 프로젝트에서 데이터베이스 엔진, 사용자 알림, 오류 처리 등과 같은 도우미 객체를 어떻게 구성하고 관리합니까?
큰 PHP CMS가 있다고 가정합니다. CMS는 다양한 수업으로 구성됩니다. 몇 가지 예 :
- 데이터베이스 객체
- 사용자 관리
- 항목 생성 / 수정 / 삭제를위한 API
- 최종 사용자에게 메시지를 표시하는 메시징 개체
- 올바른 페이지로 이동하는 컨텍스트 핸들러
- 버튼을 표시하는 탐색 모음 클래스
- 로깅 객체
- 가능하면 사용자 정의 오류 처리
기타
나는 영원한 질문을 다루고 있습니다. 어떻게 이러한 객체를 필요로하는 시스템의 각 부분에 접근 할 수있게 만드는지에 대한 것입니다.
몇 년 전의 첫 번째 접근은 이러한 클래스의 초기화 된 인스턴스를 포함하는 $ application 전역을 갖는 것이 었습니다.
global $application;
$application->messageHandler->addMessage("Item successfully inserted");
그런 다음 Singleton 패턴과 공장 기능으로 변경했습니다.
$mh =&factory("messageHandler");
$mh->addMessage("Item successfully inserted");
하지만 그것도 만족스럽지 않습니다. 단위 테스트와 캡슐화는 나에게 점점 더 중요 해지고 있으며, 글로벌 / 싱글 톤의 논리를 이해하면 OOP의 기본 아이디어가 파괴됩니다.
물론 각 개체에 필요한 도우미 개체에 대한 여러 포인터를 제공 할 가능성이 있습니다. 아마도 가장 깨끗하고 리소스를 절약하고 테스트하기 쉬운 방법이지만 장기적으로는 이것의 유지 관리 가능성에 의문이 있습니다.
내가 살펴본 대부분의 PHP 프레임 워크는 단일 패턴 또는 초기화 된 객체에 액세스하는 함수를 사용합니다. 둘 다 좋은 접근 방식이지만 내가 말했듯이 나는 둘 다 만족하지 않습니다.
여기에 어떤 공통 패턴이 존재하는지에 대한 내 시야를 넓히고 싶습니다. 장기 적이고 실제적인 관점 에서이를 논의하는 리소스에 대한 예제, 추가 아이디어 및 포인터를 찾고 있습니다 .
또한 이 문제에 대한 전문적, 틈새 시장 또는 평범한 이상한 접근 방식에 대해 듣고 싶습니다 .
$mh=&factory("messageHandler");
것은 무의미하며 성능상의 이점을 제공하지 않습니다. 또한 이것은 5.3에서 더 이상 사용되지 않습니다.