2011-01-20 4 views
8

간단한 MVC 스켈레톤을 만들려고하고 있는데 종속성이 있습니다.MVC 종속성 삽입

이 내가 지금 무엇을 가지고 :

$config = new Config(); 
$database = new Database($config); 
$uri = new Uri('article/5'); 
$request = new Request($uri); 
$response = new Response; 
$router = new Router; 
$dispatcher = new Dispatcher($request, $response, $router); 

$dispatcher->dispatch(); // Routing, instantiate controller, execute action, send response 

질문은 : 어떻게 모든 개체는 종속성에 대한 액세스 권한을 얻을 수 있나요?

몇 가지 예 :

  • 컨트롤러는 출력 서식 옵션을 얻을 구성이 필요할 수 있습니다.
  • Mapper는 쿼리를 수행하기 위해 데이터베이스가 필요할 수 있습니다.
  • 모든 컨트롤러/도우미는 로그에 액세스해야합니다.
  • 도우미는 몇 가지 종속성이 필요할 수 있습니다 (예 : 라우터가 필요합니다 .Uri_Helper).

내가 생각할 수있는 유일한 가능성은 레지스트리를 사용하는 것일뿐입니다.하지만 이것은 법의 법칙을 위반합니다 (실제로 필요한 것을 물어보십시오).

답변

5

귀하는 factories (우수 기사)를 작성합니다. 이것은 완전히 지루할 수 있습니다 (예를 들어 기사와 같이). 예를 들어 DI 프레임 워크를 사용할 수 있습니다.

  • Symfony DIC : Juraj의 게시물을 참조하십시오.
  • PD
  • Yadif
  • Drip (PHP4는) :하지만 한 동안 업데이트되지 않았습니다.

나는 또한 Misko의 블로그가 매우 흥미롭고 테스트를 올바르게 수행하는 방법에 대해 많은 것을 알고 있다고 지적하고 싶습니다. 특히 guide to writing testable code은 반드시 읽어야합니다.

P.S : PHP를 스크립팅 언어로 사용하고 사이트를 최대한 빨리 만들기 위해 가능한 한 작은 코드를 사용해야하므로 필자는 공장을 작성해야한다고 생각합니다. 일부 PHP frameworks의 문제입니다.

라스무스 Ledorf (PHP의 발명가)의 인용 : 그들은 몇 가지에 이르는 사소한 몇 가지 단계로 웹 응용 프로그램을 개발을 줄일 것 때문에

많은 프레임 워크가 먼저 눈에 호소 매우 보일 수 있습니다 코드 생성 그리고 종종 자동 스키마 검색 이 단축키는 에 병목 현상이 될 수 있으므로 은 의 유연성과 성능을 희생하여이 단순함을 달성합니다. 은 약속 한대로 귀하의 신청서를 작성하지 않습니다. 은 직접 작성해야합니다. .대신 일부 외국 프레임 워크에 실수를 고정 으로 시작하고 환경에 적용되지 않는 모든 일을 리팩토링의 시간이 직접 요구 사항에 맞는 린 재사용 패턴을 구축 보낸다. 마지막으로 내 자체 개발 한 작은 프레임 워크가 시간과 악화를 저장하고 더 나은 제품으로 을 끝낼 것입니다.

1

Symfony DIC과 같은 종속성 주입 컨테이너를 사용할 수 있습니다. 인스턴스화를 처리하는 것보다 컨테이너 내부에 객체, 구성 및 배선을 정의합니다.

관련 문제