为什么要将路由器设为私有?
Why make router private?
在Angular2+(4)routing tutorial中表示让router
成为私有成员,例如:
constructor(
private router: Router, // <- router is private
private heroService: HeroService) { }
...
) {}
但它没有提供任何解释为什么路由器在这里是私有的。将其设为私有会使其更难测试,那么将其设为私有的原因是什么?它只是最佳实践,还是有一些安全隐患 public?
另外,具体来说,如何测试路由,以便在不同情况下导航到正确的路由?本教程根本没有提到测试 router/routes ?
封装。使您的字段 私有 和功能 public。使用您的 class in this case
的客户只需要知道它能做什么,而不是它是怎么做的。
TypeScript 中有 3 个访问级别,public, private, protected
。这些关键字仅在 Typescript 级别受支持。
如果您将 variable/function
设为私有,它将 在 class 之外不可见。
如果您设置variable/function
public,它将在class之外可见 ].
如果您使 variable/function
受到保护,它将 可见 仅在 class 本身中并且继承 class.
的任何 class
添加 private
、public
或 protected
会隐式添加一个 class 级字段,传递的构造函数参数将分配给该字段。
这是用于减少样板文件的 TypeScript 功能。
您现在可以使用
访问传递的值
someMethod() {
this.router...
}
而不是
class MyComponent {
router:Router;
constructor(
router: Router, // <- router is private
private heroService: HeroService) { }
...
) {
this.router = router;
}
someMethod() {
this.router...
}
}
如果没有特定的理由,使之成为public
或protected
,private
是正确的选择。这就是他们所做的。
在这个具体的例子中,这对路由器来说并不是特别的……在一般的 OOP 中,问题总是 "is this supposed to be accessed by outside code as part of the public interface of this class?" 你有没有期待 router
在这里可以从 ctrl.router
等其他任何地方公开和访问?如果不是,那么最好保留它 private
。将公开的 public 接口限制在真正必要的部分,可以更容易地弄清楚什么使用什么,并在以后根据需要重构它,因为没有外部代码绑定到它。
在Angular2+(4)routing tutorial中表示让router
成为私有成员,例如:
constructor(
private router: Router, // <- router is private
private heroService: HeroService) { }
...
) {}
但它没有提供任何解释为什么路由器在这里是私有的。将其设为私有会使其更难测试,那么将其设为私有的原因是什么?它只是最佳实践,还是有一些安全隐患 public?
另外,具体来说,如何测试路由,以便在不同情况下导航到正确的路由?本教程根本没有提到测试 router/routes ?
封装。使您的字段 私有 和功能 public。使用您的 class in this case
的客户只需要知道它能做什么,而不是它是怎么做的。
TypeScript 中有 3 个访问级别,public, private, protected
。这些关键字仅在 Typescript 级别受支持。
如果您将 variable/function
设为私有,它将 在 class 之外不可见。
如果您设置variable/function
public,它将在class之外可见 ].
如果您使 variable/function
受到保护,它将 可见 仅在 class 本身中并且继承 class.
添加 private
、public
或 protected
会隐式添加一个 class 级字段,传递的构造函数参数将分配给该字段。
这是用于减少样板文件的 TypeScript 功能。
您现在可以使用
访问传递的值someMethod() {
this.router...
}
而不是
class MyComponent {
router:Router;
constructor(
router: Router, // <- router is private
private heroService: HeroService) { }
...
) {
this.router = router;
}
someMethod() {
this.router...
}
}
如果没有特定的理由,使之成为public
或protected
,private
是正确的选择。这就是他们所做的。
在这个具体的例子中,这对路由器来说并不是特别的……在一般的 OOP 中,问题总是 "is this supposed to be accessed by outside code as part of the public interface of this class?" 你有没有期待 router
在这里可以从 ctrl.router
等其他任何地方公开和访问?如果不是,那么最好保留它 private
。将公开的 public 接口限制在真正必要的部分,可以更容易地弄清楚什么使用什么,并在以后根据需要重构它,因为没有外部代码绑定到它。