2011-02-07 5 views
2

수제 프레임 워크/라이브러리 (세션, DB, 캐시, 구성 유형 클래스)가 포함될 "라이브러리"폴더가있는 응용 프로그램에서 작업하고 있으며 다음 섹션의 폴더가 들어있는 "모듈"폴더종속성 삽입 대신 핵심 PHP 클래스 확장?

대부분의 내 모듈 (블로그, 포럼 등)에서 캐시, 데이터베이스, 로거, 설정 객체와 같은 여러 객체가 필요합니다. 나는 이것을 위해 의존성 주입을 사용할 계획을 가지고 있었지만 호기심이 많았습니다. 내 데이터베이스, 캐시, 로거, 시간, 메소드와 같은 것을 할 수있는 핵심 클래스/객체를 가질 수 없었고이 핵심 클래스를 다른 객체로 확장 할 수 없었습니다. 모듈 클래스를 만들고이를 삽입 할 필요없이 이러한 모든 것들을 사용할 수 있습니까?

나는 클래스/객체를 사용하는 것에 매우 익숙하기 때문에 여기에서 벗어날 수 있습니다. 설명해주십시오.

답변

3

확장 클래스 나, 음, 에게 권한을 확장 할 의미가 있습니다.
확장이 기본 클래스의 원래 용도와 아무 관련이없는 경우 일반적으로 지저분 해집니다.

예를 들어, 당신은 DbMySql 클래스 (전문)와 DbBase 클래스를 확장 할 수있다, 또는 Html5Helper (확장)과 HtmlHelper.

DbClassProductsModule으로 확장하면 안됩니다. 둘 다 서로 관련이 없습니다. ProductsModule은 본질적으로 데이터베이스에 바인딩되어 있지 않으므로 서로 관련이없는 책임을 혼합하고 있습니다.

0

당신이 무엇을 CAN일까요? 필요한 단일 개체를 인스턴스화하고 제공하는 팩토리 클래스를 만듭니다. 같은 것 :

$db = myFactory::getDBO(); 
$conf = myFactory::getConfig(); 
$session = myFactory::getSession(); 

등등.

+3

DI 컨테이너가 더 적합 할 것이다. http://components.symfony-project.org/dependency-injection/ – Gordon

+0

@Gordon 이것이 내 뜻입니다. Joomla의 프레임 워크에서이 서비스를 제공하는 Factory 클래스입니다 ... JFactory라고도 불립니다. :) –

1

나는 또한 Gordon에 동의합니다.

개인적으로 나는 공장 정적 방법 접근법을 피합니다. 본질적으로 전역 변수를 사용하는 것과 같습니다. 그것은 서비스 탐지기의 안티 패턴입니다.

제안 된 DI 컨테이너 외에도 수동 의존성 주입 (DI 컨테이너 사용)이 유용한 접근 방법입니다. 느슨하게 결합되도록 수업을 설계 할 수있는 도구 (예 : 컨테이너)가 없으며 수동 DI를 사용하면 수업에 집중하는 데 도움이된다는 사실을 알게되었습니다.

[P.S. 나는 이것을 주석으로 추가했을 것이다. 그러나 나는 새롭고 논평 할 수 없다.]