2012-11-17 3 views
1

저는 웹 사이트의 구성 요소를 클래스로 이동하려고합니다. 예를 들어이 스 니펫은 여러 파일에서 사용해야하지만 코드를 복사하여 붙여 넣기를 원하지는 않습니다.종속성 및 인스턴스화

<?php 
... 
require "ActionManager.php"; 
require "Action.php"; 
require "includes/pdo.php"; 

$actionMan = new ActionManager(); 
$actionMan->setPDO($pdo); 
$actionMan->setUserData($data); 
echo $actionMan->getActions(3); 
?> 

가 좋아 나는 처음 두가 필요로 내가 없애 spl_autoload_register()를 사용할 수 있습니다 알고 있지만, 나는 반복 끝나지 않도록 내가 무엇을 찾고 있어요 것은 의존성 컨테이너 어떤 종류의 생각 이 코드를 수정하고 변경되면

또한 나는 많은 classess에서 setPDO() 및 setUserData() 메서드를 반복하고 있습니다.

누군가 나를 친절하게 올바른 방향으로 안내 할 수 있습니까?

+0

Symfony는 훌륭한 독립 실행 형 의존성 주입 컨테이너를 가지고 있습니다. 거기를 보아라. –

+0

똑같은 코드를 반복하고 있습니까? 그렇다면 그것을 함수/클래스로 추상화하고 변경된 변수만으로 호출해야합니다 ...? – deceze

답변

1

진술서가 없어야합니다. 대신 의존성을 자동로드하십시오. Anthony Ferrara의 costs and benefits of autoloading에 대한 좋은 블로그 게시물이 있는데 전체적으로 자동 로딩이 가장 좋은 솔루션이라고 결론 내었습니다.

나머지 코드는 부트 스트랩 코드와 비슷합니다. ActionManager의 새 인스턴스 하나를 만들고 setter 메서드를 통해 두 개의 종속성을 주입합니다. 이것이 실제로 의존성 계층 구조의 최상위 레벨에있는 부트 스트랩 코드라면 new을 사용하는 것이 좋습니다. 내가 좋아하지 않는 것은 분명히 의존성이 필요한 파일에 이미 만들어 졌는지 여부를 사용자가 말할 필요없이 (종속 인스턴스 생성은 게으른 인스턴스 생성을위한 옵션 없음) 말할 필요가 없다는 것입니다.

전체적으로 애플리케이션에 따라 DIC 사용을 고려할 수 있지만 너무 많이 좋아하지는 않습니다. DIC없이 적절한 생성자 주입을 수행 할 수 있습니다. 사실, 대부분의 사람들은 DIC를 잘못 사용하고 DI가 대응해야하는 문제를 다시 만듭니다.

아키텍처를 더 많이 보여 주려면 일반적인 종속성을 처리하는 방법에 대해보다 자세한 조언을 제공 할 수 있습니다.