我开始写成绩单。应该将类属性声明为接口类型还是特定类(实现该特定接口的类)?
import { ITable, Table } from "aws-cdk-lib/aws-dynamodb";
import { Construct } from "constructs";
export class Database extends Construct {
public readonly usersTable: Table; // <======== should it be Table(class) or ITable(interface)
constructor(scope, id) {
super(scope, id);
this.usersTable = this.createUsersTable();
}
private createUsersTable(): Table { // <======== should it be Table(class) or ITable(interface)
// some implementation
...
return usersTable;
}
}什么是更好的练习?
发布于 2022-08-01 13:59:38
CDK中的接口用于类型检查和建筑施工。
在声明对象时,您必须问自己--这必须是一个表,还是可以是一个类似于对象的表?在这一点上,只有一个表像资源-一个表。
有些东西具有多种资源,比如IAM策略的可互换类型。但是即使如此,CDK中接受策略的代码已经接受了一个接口。
除非您正在构建您自己的自定义构造对象,否则我将不使用接口。这会造成混乱,而且在某些情况下,我认为打字本甚至不能正常工作(不能百分之百肯定,打字稿不是我的长处)。
在设计采用特定类型但可以采用该类型的任何版本的属性/参数时,最好使用接口。对于直截了当的对象声明,Type总是比一般的更准确、更具体。
发布于 2022-08-06 17:35:50
与具体类相比,您可能更喜欢接口,原因之一是使您的构造能够使用导入的资源,这通常会产生接口(例如fromTableArn方法)。如果您知道您或其他使用您的构造的人不会使用导入的资源,那么我想不出使用接口的好理由,因为使用接口通常会限制您对某些属性的访问。例如,Lambda的IFunction接口没有显示超时值属性,而函数有。
发布于 2022-08-01 07:45:55
使用接口总是更好。但是,有些函数在CDK中使用接口时不可用。我在构造、输入和公共方法上使用接口。对于私有属性/方法,默认情况下我使用接口,如果需要,我很少将它更改为具体类型。
https://stackoverflow.com/questions/73187452
复制相似问题