나는 의존성 주입 이론에 대해 많은 연구를 해왔다. 특정 시나리오에서는 복잡성/부풀림을 초래하는 것 외에는 큰 의미가있다.PHP Dependedncy Injection & Complexity
먼저 DI 컨테이너 인스턴스가 어떤 객체에도 전달되지 않는다고 가정합니다. 나쁜 습관과 그 모든 것들 ...
예 : 특정 사용자가 시스템에서 작성한 다른 모든 비즈니스 오브젝트와 관련된 "사용자"클래스를 고려하십시오.
사용자 인스턴스를 삭제하려는 경우 관련된 모든 개체 (예 : 레코드, 파일, 이미지 등)도 삭제해야합니다. 이것은 모든 관련 객체의 조회 및 삭제를 허용하기 위해 각 종속성의 인스턴스가 사용자 인스턴스에 삽입된다는 것을 의미합니까? 즉, 삭제되는 사용자 인스턴스에 의해 생성/업로드 된 모든 이미지를 삭제하려면 ImageMapper (또는 ImageMapperFactory)의 인스턴스를 전달해야합니다.
그렇지 않은 경우 이러한 시나리오는 서비스 로케이터를 사용해야하는 좋은 예입니까?
기사 & 자습서에서 프로그래머는 전염병과 같은 모든 클래스에서 "new"를 사용하지 말아야한다는 것을 반복해서 되풀이합니다. 그러나 다양한보기를 작성해야하는 제어기의 경우에는 이것이 실제로 가능합니까?
최소한 DI와 관련하여 SOLID mantra를 준수하는 구체적인 예가 인정 될 것입니다. 컨트롤러 클래스에 필요한 모든 의존성의 인스턴스를 채우는 방법이나 그러한 종속성의 최상의 인스턴스가 위치하거나 생성됩니까?
siebz0r, 문제에 대한 연구를 계속하면서 천천히 내린 결론을 확인했습니다. 특히 서비스 계층 :) 저는 Bob (삼촌)의 "클래스/객체 이름에 동사 없음"규칙의 위반을지지한다고 확신했기 때문에 서비스 계층의 개념에 회의적이었습니다. 계속 ... – Nibbl3r
그러나 서비스 레이어/애스펙트가 모델이 도메인 데이터 객체를 나타내며 자신을 "인식"(예 : SOLID)하고 서비스 레이어 핸들 논리적으로 생각한다면 "얇은 컨트롤러와 뚱뚱한 모델"을 의미하는 비즈니스 로직입니다. "뚱뚱한"모델은 단 하나 책임 원리를 나타내거나/지원하기 위하여 예정된다 imho & 너가 buss을 다만 부딪히면 안된다 아이디어에 늘인다. 컨트롤러에서 모델로의 논리가 아니라 서비스 계층이 완벽한 의미를 갖도록 우려를 분리합니다. – Nibbl3r
데이터 맵퍼가있을 때 저장소 패턴의 관련성/적용 가능성에 대해 여전히 숙고하고 있습니다. 저장소는 단지 도메인 개체의 여러 인스턴스를 가져오고 표시하는 것을 종종 고려하지만 한 번에 하나의 인스턴스 만 조작 (예 : 편집/업데이트)하므로 데이터 매퍼를 그렇게 보이게 만듭니다 잘 어울린다. – Nibbl3r