我的经验是使用静态类型语言,我必须承认,在尝试使用动态语言时,我会感到迷茫。我想避免的一件事是应用在这种情况下没有意义的概念。请假设这个类属于我的项目,我们想用Jasmine测试它:
class MyEs6Class {
constructor(
collaborator1 = new MyCollaborator(),
factory = new MyFactory()) {
this.collaborator1 = collaborator1;
this.factory = factory;
}
method() {
// Code
}
}
我在构造函数中提供了对象的默认实例,因为这允许我在测试时模拟它们。我试图以与我使用相同的方式使用控制反转,比方说C#,但是使用该语言的动态特性来避免依赖注入容器。这两个依赖项是类所必需的,因此从结构的角度来看,我认为必须使用构造函数提供它们。
另外,我正在使用工厂的概念,因为虽然该类是“活着的”,但可能需要多次来自工厂的新对象。
从ES6类的角度来看,我知道私有和公共(https://stackoverflow.com/a/27853642/185027)之间没有区别,所以我可以通过私有方法处理工厂的逻辑,但依赖于他测试似乎错了。另一方面有一个叫做工厂的东西,因为我需要假装返回的对象看起来很奇怪,也许是在尖叫我缺乏知识。