2011-04-09 3 views
6

PHP에서 프론트 컨트롤러 구현에 대한 "개념적"질문이 있습니다.싱글 톤없는 PHP 프론트 컨트롤러 구현 : 개념적 질문

내가 본 Front Control 컨트롤러의 대부분은 Singleton으로 구현되었으며, Singleton 패턴의 큰 팬이 아니며 Front Controller의 유니크 인스턴스를 저장할 정적 속성이있는 컨테이너를 만들었습니다. 그건 내 목표와 내가했다,

$fc = FrontController::getInstance(); 

용기와 내가을 FrontController 외부 구성을 넣을 수 :

싱글로

, 내가 생성자 (또는 생성자에 의해 호출하는 방법) 내부의 초기화 코드를 삽입했다 여전히 FrontController를 검색하는 간단한 방법이 있습니다.

$fc = Container->getFrontController(); 

이 코드는 나에게 훨씬 깨끗해 보이며 상위 생성자에 대한 걱정없이 깨끗한 서브 클래 싱을 얻을 수 있습니다.

'bootstrap'시간에는 꽤 똑같지 만, 실제로 이전 구현과의 차이점은 생성자가 아니기 때문에 (DAO 또는 액션 내부에서) 응용 프로그램의 어느 곳에서나 FrontController를 만들 수 있다는 것입니다. 더 이상 개인/보호.

내 질문은 : 는 내 클래스의 사용자 앱의 어디서든을 FrontController 인스턴스를 만들 수있는 가능성을 제공하는 '나쁜 관행'인가? 나는 문서를 작성하고 다른 클래스와 함께 컨테이너를 제공하지만 이상한 사용을 방지해야하는지 궁금합니다.

답변

2

앱 내부에 FrontController 인스턴스를 만드는 실제적인 이유가 있습니까? 그 때 가면. 그렇지 않으면 나중에 상황이 복잡해질 수 있으므로 조금 회의적입니다. 내가 두려워하는 것은 게으름에서 벗어나거나 더 잘 모르기 때문에 훨씬 간단한 방법이있을 때 새로운 FrontController 인스턴스를 사용하는 사람입니다. 일단 효과가있는 것을 찾으면 어떤 사람들은 더 좋은 방법이 있다고해도 계속 그렇게하는 경향이 있습니다. 당신만큼 좋지 않은 사람들과 일해야 할 수도 있다는 것을 잊지 마십시오.

개인적으로 나는 이것을 숨기거나 완전히 허용하지 않을 것입니다. 그러나 나중의 릴리스에서이를 염두에 두었습니다. 모든 것이 가장 좋은 옵션 인 경우에 비틀 거려서 "공식"인터페이스에 추가하십시오.

일단 기능을 야생으로 출시하면 너무나 힘들어 죽이는 것을 잊지 마십시오.

+0

이제는 frontcontroller가 고유해야하는 몇 가지 항목 중 하나라는 사실을 깨닫고 생각해 주셔서 감사합니다. 그리고 비록 내가 싱글 톤으로 프론트 컨트롤러를 구현하더라도 여전히 getFrontController() 메소드를 작성할 수 있습니다 :) 테스트 중에는 문제가 발생하지 않기를 바랍니다. – fatmatto

2
$fc = Container::getFrontController(); 

소리가 잘 들립니다.

개발자가 프런트 컨트롤러 인스턴스를 어디서나 검색 할 수 있도록하는 것이 좋지 않을 것이라고 생각합니다. 개발자가 어떤 작업을 할 수 있는지 올바르게 제어하면 (예 : 일부 속성을 덮어 쓰거나 틀린 방식으로 메서드를 실행하지 마십시오. 오류/경고 표시없이 사용자에게 주문).

+0

나는 여러 문제가 여러 인스턴스화를 일으키는 원인이 될 것이라고 이해해야한다. :) – fatmatto

관련 문제