조만간 다른 개발자의 추상화를 사용해야 합니다. 즉, 다른 사람의 코드에 의존하게 됩니다. 나는 종속성 없는(종속성 없는) 모듈을 좋아하지만 달성하기가 어렵습니다. 여러분이 만든 멋진 블랙박스 구성 요소도 어느 정도 의존합니다. 이것이 의존성 주입이 작용하는 곳입니다. 종속성을 효과적으로 관리하는 능력은 이제 절대적으로 필요합니다. 이 기사에는 문제에 대한 탐구와 일부 해결 방법이 요약되어 있습니다.
1. 목표
두 개의 모듈이 있다고 상상해 보세요. 첫 번째는 Ajax 요청 서비스(service)를 담당하고, 두 번째는 라우팅(router)을 담당합니다.
이를 수행하는 데 도움이 되는 도구가 필요합니다. 이것이 의존성 주입이 해결하려고 하는 문제입니다. 종속성 주입 솔루션이 달성해야 하는 몇 가지 목표를 적어 보겠습니다.
종속성을 등록할 수 있어야 합니다
1. 주입은 함수를 취하고 필요한 함수를 반환해야 합니다
2. 너무 많이 작성할 수 없습니다. 간결하고 아름다운 구문이 필요합니다
3 .Injection은 전달된 함수의 범위를 유지해야 합니다
4. 전달된 함수는 종속성 설명뿐만 아니라 사용자 지정 매개변수를 허용할 수 있어야 합니다
5. 완벽한 체크리스트입니다.
3. RequireJS/AMD 방법
RequireJS에 대해 들어보셨을 것입니다. 종속성 주입 문제를 해결하는 데 좋은 선택입니다.
}
}
그러나 이 접근법은 완벽하지 않으며 이는 반사형 주사의 매우 큰 문제입니다. 압축은 매개변수 이름을 변경하고 올바른 매핑을 유지할 수 없기 때문에 논리를 깨뜨립니다. 예를 들어 doSometing()을 압축하면 다음과 같이 보일 수 있습니다.
var doSomething = injector.resolve(['service', 'router', function(service, router) {
}]);
5. Scope 직접 주입
때로는 연산 함수의 범위(즉, this 객체)와 관련된 세 번째 주입 변수를 사용합니다. 따라서 이 변수를 사용할 필요가 없는 경우가 많습니다.