2012-02-29 2 views
0

PHP로 단순화 된 MVC 유형 구조의 응용 프로그램이 있습니다. 이 응용 프로그램은 회사 및 다른 사람들이 운영하는 12 개 이상의 사이트에서 사용됩니다. 구조는 컨트롤러 파일, app 클래스가 포함 된 application 폴더 및 template과 같은 사이트 특정 코드가 포함 된 site 폴더로 구성됩니다. 주기적으로 변경 사항을 배포 할 때 컨트롤러와 응용 프로그램 폴더를 업데이트하는 패치 프로그램을 배포합니다. 결과적으로 클라이언트는 코드가 업데이트 될 때 변경 사항을 손실하지 않고 응용 프로그램 폴더의 핵심 코드를 실제로 변경할 수 없습니다.클라이언트가 클래스를 재정의하도록 할 수 있습니까?

나는 고객이 원하는 것을 설명 할 수 있다고 말했고, 그들은 기존 클래스를 확장 할 수있는 능력을 원합니다. 이것을 허용 할 수있는 디자인 패턴이 있습니까? 지금, 나는 사용자에게 전체 클래스를 대체 할 수있는 능력을 준 :

spl_autoload_register('loadSiteClass'); 
spl_autoload_register('loadCoreClass'); 

이 클래스에 대한 응용 프로그램 폴더에보고하기 전에 클래스에 대한 사이트 폴더를 확인하는 자동 로더를 사용합니다. 클래스를 완전히 대체하지 않고 기존 클래스를 확장하는 클래스를 자동 검색,로드 및 사용하는 대안을 찾고 싶습니다. 어떤 제안이라도 크게 환영받을 것입니다. 미리 감사드립니다.

도움이된다면 site admin에 사이트 설정 파일을 추가 할 수 있습니다. 사이트 관리자는 클래스가 확장 중임을 알려주는 설정을 추가 할 수 있지만 그 정보를 사용하는 방법은 확실하지 않습니다. 제공된 경우.

답변

1

codeigniter는 시스템 클래스의 "client"/ "application"폴더에 미러 디렉토리 구조를 가지고 있습니다. 그런 다음 시스템 클래스와 동일한 위치에 파일을 만든 다음 시스템 클래스를 확장하면로드 클래스가 먼저 대체를 찾은 다음 대체합니다. 일부 코드 예제 여기

확인 : https://github.com/EllisLab/CodeIgniter/blob/develop/system/core/Loader.php#L277

그들의 documentation 자신의 패턴을 이해하기 더 도움이 될 수 있습니다.

나는 이것을 할 수있는 더 많은 방법이있을 것이라 확신합니다. 그러나 일반적으로 디렉토리 구조와 간단한 PHP의 "확장"규칙은 나에게 의미가 있습니다.

관련 문제