2014-05-14 3 views
0

저는 전문가의 의견을 듣고 자하는 회의에서 제기 된 질문이 있습니다. 내 앱에 필요한 많은 컨트롤러가 필요로하는 'userService'가 있다고 가정 해 보겠습니다. (사실 그들 대부분).각도 연습 - 범위 상속 대 사출 사용

모든 부모 컨트롤러가이 userService를 삽입하고 해당 서비스의 속성을 자식 컨트롤러에 표시한다는 것이 내 생각이었습니다. '자식'컨트롤러는 부모 범위에 액세스 할 수 있으므로 모든 컨트롤러에 'userService'를 삽입 할 필요가 없습니다.

다른 사용자의 의견으로는 서비스가 부모로부터 상속되었는지 여부에 관계없이 필요로하는 모든 컨트롤러에 'userService'를 삽입하는 것이 었습니다. 기본적으로 코드를 읽기 쉽고 변수가 어디에 있는지 쉽게 찾을 수 있기 때문입니다. 에서.

나에게이 견해는 틀린 것처럼 보이며 Angular의 요점과 프로토 타입 상속 및 스코프의 힘을 사용하는 방법을 놓치고 있습니다. 이것은 실제로 동일한 것을 참조하는 불필요한 인스턴스를 메모리에서 생성하지 않습니까? 왜 그걸하고 싶니?

나는 이것에 약간 경험 의견을 듣고 싶을. 감사합니다.

답변

2

메모리의 참조가 저렴합니다. 그것들에 대해 걱정하지 마십시오. 더 중요한 것은, 당신이 암시 적으로 의존성을 만들어서 재사용이 불가능한 구성 요소를 만들어내는 경우, 그 자식이 그 일을해야하는 범위에 뭔가를 넣을 때입니다. 대신 인수 목록을 통해 종속성을 선행 적으로 선언해야합니다. 나중에 테스트 할 때 감사 할 것입니다. 범위 상속은 템플릿이 아니라 컨트롤러가 상속됩니다.

+0

모두 좋은 댓글들, 감사합니다! 당신은 나를 더 똑똑하게 만들었습니다.) – 29er

1

두 가지 인수가 있지만 가능한 경우 범위 상속을 피합니다. 심지어 대부분의 지시문에 범위를 격리합니다. 그 이유는 더 자연스럽게 코드를 분리하고 캡슐화 할 수 있기 때문입니다. 캡슐화는 일반적으로 컨트롤러에 대한 문제가 적지 만 스코프 계층 구조에 관계없이 언제든지 서비스에 액세스 할 수 있다는 것을 아는 것이 좋습니다.

0

내가 틀렸다면 누군가가 나를 교정 할 수 있지만, 나는 이렇게 생각합니다.

Controller A 그것은 제어기 A에서 A.method Controller B 상속을 통해 액세스 할 수 있지만 그것이 무엇인지하지 않는 한 서비스 A에 액세스 할 수있는 서비스 A를 주입한다.

범위 상속은 해당 서비스를 범위 변수에 할당 할 때 작동합니다. 우리가 지금 그것을 바꿀 경우 Controller A$scope.A = A THEN Controller B으로 설정되면 $scope.A.method을 통해 서비스에 액세스 할 수 있습니다.

삽입 된 서비스 자체가 상속 된 것으로 생각하지 않습니다.

메모리 측면에서 나는 너무 걱정하지 않을 것입니다. Angular는 새 인스턴스를 만들지 않고 참조 만 만듭니다. 서비스는 싱글 톤이며 파괴되지 않는 한 다시 생성되지 않습니다. 팩토리를 사용하는 경우 새 객체를 얻을 수 있지만 그 차이는 다릅니다.