2017-09-07 5 views
2

, 그것은 router에게 개인 회원, 예컨대하게 보여줍니다라우터를 비공개로 만드는 이유는 무엇입니까? 각 2+ (4) <a href="https://angular.io/tutorial/toh-pt5" rel="nofollow noreferrer">routing tutorial</a>에서

constructor(
    private router: Router, // <- router is private 
    private heroService: HeroService) { } 
    ... 
) {} 

을하지만 라우터가 여기에 개인 이유는 에 같은 설명을 제공하지 않습니다. 비공개로 설정하면 테스트하기가 더 어려워 지므로 비공개로 설정해야합니다. 단지 최선의 관행인가, 아니면 그것을 공개하는 것이 어떤 보안 함의인가?

라우팅을 테스트하는 방법, 다른 상황에서 올바른 경로를 탐색하는 방법은 무엇입니까? 이 자습서에서는 라우터/경로를 으로 테스트하는 것을 전혀 언급하지 않았습니다.?

+0

감사합니다. 개인적으로 표시하는 것이 무엇인지 이해합니다. 그 이유에 대해 궁금해합니다. – danwellman

답변

2

private, public 또는 protected을 추가하면 전달 된 생성자 매개 변수가 할당 된 클래스 수준 필드가 암시 적으로 추가됩니다.

더 적은 상용구 용 TypeScript 기능입니다. 이 public 또는 protected, private이 올바른 선택인지 확인 할 특별한 이유가없는 경우

는 이제

someMethod() { 
    this.router... 
} 

대신

class MyComponent { 
    router:Router; 

    constructor(
    router: Router, // <- router is private 
    private heroService: HeroService) { } 
    ... 
) { 
    this.router = router; 
    } 

    someMethod() { 
    this.router... 
    } 
} 

의 사용 전달 된 값에 액세스 할 수 있습니다. 이것이 그들이 한 일입니다.

1

캡슐화. 필드를 으로 설정하고 및 기능 으로 설정하십시오. class in this case을 사용하는 클라이언트는 어떻게 수행 할 수 있는지를 알 필요가 있습니다.

TypeScript에는 세 가지 액세스 수준 인 public, private, protected이 있습니다. 이 키워드는 Typescript 레벨에서만 지원됩니다.

당신이 당신의 variable/function개인, 그것은 클래스 외부 볼 수 없습니다 확인합니다.

당신이 당신의 variable/function공공, 그것은 클래스 외부 볼 수 있도록합니다.

당신이 만드는 경우 보호variable/function, 그것은 단지 클래스 자체와 그 클래스를 상속하는 모든 클래스에 표시됩니다.

1

이 특정 예제에서는 라우터와 거의 관련이 없습니다. 일반적으로 OOP에서 질문은 항상 "이 코드는이 클래스의 공용 인터페이스의 일부로 외부 코드에서 액세스해야합니까?"router 여기에 ctrl.router 같은 다른 곳에서 액세스하고 액세스 할 것이라고 기대하십니까? 그렇지 않다면 유지하는 것이 현명합니다. private. 노출 된 공용 인터페이스를 실제로 필요한 부분에만 제한하면 무엇을 사용하는지 쉽게 파악할 수 있으며 나중에 외부 코드가 바인딩되지 않아 나중에 필요할 때 리팩터링 할 수 있습니다.