2017-09-07 46 views
2

在角2+(4)routing tutorial,它显示使router的私有成员,e.g:为什么让路由器保密?

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

但为什么路由器是私人这里不提供任何解释,。拥有私密性使得测试变得更加困难,那么私密性是什么原因呢?这只是最佳实践,还是存在一些公开的安全隐患?

此外,具体而言,如何测试路由,正确的路线导航到不同的情况?本教程没有提到测试路由器/路由在所有

+0

感谢大家,我明白什么是私人标记,只是对它背后的理由感到好奇。 – danwellman

回答

2

添加private,publicprotected隐式添加传递的构造函数参数分配给的类级字段。

这是一个TypeScript功能,用于较少的样板。

现在可以使用的

someMethod() { 
    this.router... 
} 

代替

class MyComponent { 
    router:Router; 

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

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

访问传递的值如果没有特殊原因,使其publicprotectedprivate是正确的选择。这是他们做的。

1

封装。使你的领域私人和功能公众。使用class in this case的客户端只需知道它可以做什么,而不知道它是如何做的。

TypeScript有3个访问级别,public, private, protected。这些关键字仅在Typescript级别中受支持。

如果你让你的variable/function私人,它将不是类的外部可见

如果你让你的variable/function公共,它将是类外部可见

如果你让你的variable/function保护,它将只能在类本身和继承类的任何类可见

1

对于这个具体例子中的路由器来说,这并不是特别的......在OOP中一般来说,问题总是是“这应该是由外部代码作为这个类的公共接口的一部分吗?你有没有想过router在这里被暴露并从其他地方访问,如ctrl.router?如果不是,那么只有谨慎才能保持private。仅将暴露的公共接口限制为真正必要的部分,可以更容易地找出什么使用什么,并在必要时重构它,因为没有外部代码绑定它。

相关问题