【发布时间】:2019-03-13 19:38:53
【问题描述】:
我的应用程序使用工厂助手来配置各种对象。每个工厂都实现了一个接口,允许对其进行模拟以帮助测试。传统上,每个工厂都是一个实现接口的类:
interface IRequestFactory {
create(event: AWSLambda.APIGatewayProxyEvent): IRequest
}
class RealRequestFactory implements IRequestFactory {
public create(event: AWSLambda.APIGatewayProxyEvent): RealRequest {
return new RealRequest(event)
}
}
class MockRequestFactory implements IRequestFactory {
public create(event: AWSLambda.APIGatewayProxyEvent): MockRequest {
return new MockRequest(event)
}
}
RealRequestFactory 或 MockRequestFactory 可以被实例化并作为依赖注入到其他类中。然而,TypeScript 允许我们将任何东西声明为接口类型,因此可以这样做:
const realRequestFactory: IRequestFactory = {
create(event: AWSLambda.APIGatewayProxyEvent): Request {
return new Request(event)
}
}
在这种情况下,我不需要实例化一个类,并且仍然可以将realRequestFactory 作为IRequestFactory 类型的依赖项注入。这种方法看起来更简单,但我不确定它是否会被视为最佳实践,因为它感觉有点像单例。
对于针对接口输入非类是否有共识?
【问题讨论】:
-
好的,非常简短的回答,从观察野外的代码来看,我不得不说,对于做这件事的正确方法似乎没有任何共识。有人会争辩说,实现接口的实际类是更多的 OOP 方式,但另一个人可能会争辩说,“duck-typing”是用 JavaScript/TypeScript 编写东西的主要优势。
-
好的,感谢您的回复。我想我会坚持课堂方式,因为它在其他 OO 语言中更熟悉
标签: typescript