Javascript 如何正确创建角度域模型
我想正确地创建一个域模型 我在下面的尝试在构造函数外部创建属性。 我应该只在构造函数中创建和设置TestModel类的属性吗?这样,他们的代码行就更少了 我有以下我认为是正确的尝试:Javascript 如何正确创建角度域模型,javascript,angular,typescript,oop,Javascript,Angular,Typescript,Oop,我想正确地创建一个域模型 我在下面的尝试在构造函数外部创建属性。 我应该只在构造函数中创建和设置TestModel类的属性吗?这样,他们的代码行就更少了 我有以下我认为是正确的尝试: export class TestModel1 { public currentPage: number = 0; public hasNext: boolean = false; public hasPrev: boolean = false; public pageSize: number =
export class TestModel1 {
public currentPage: number = 0;
public hasNext: boolean = false;
public hasPrev: boolean = false;
public pageSize: number = 0;
public totalItems: number = 0;
constructor(data: any) {
this.currentPage = data.currentPage;
this.hasNext = data.hasNext;
this.hasPrev = data.hasPrev;
this.pageSize = data.pageSize;
this.totalItems = data.totalItems;
}
}
它看起来有点大,代码行太多了
目前我需要传入一个数据对象,然后映射。
对于我来说,使用构造函数更好地实现这一点,它们是一种聪明的方法吗?如果我们谈论模型类,其声明应该如下面的示例所示:
导出类帐户{
建造师(
公共激活:布尔,
公共当局:字符串[],
公共电子邮件:string,
public firstName:string,
公钥:字符串,
public lastName:string,
公共登录名:string,
公共图像URL:字符串
) {}
}
如果我们谈论模型类,其声明应该如下面的示例所示:
导出类帐户{
建造师(
公共激活:布尔,
公共当局:字符串[],
公共电子邮件:string,
public firstName:string,
公钥:字符串,
public lastName:string,
公共登录名:string,
公共图像URL:字符串
) {}
}
我在问题中看到的主要问题是重复。构造函数中的所有属性都是重复的,这违反了干净代码的干燥原则
如果要以更简洁的方式填充域对象的新实例,可以执行以下操作:
export class TestModel1 {
public currentPage: number;
public hasNext: boolean;
public hasPrev: boolean;
public pageSize: number;
public totalItems: number;
constructor(data: any) {
Object.keys(data).forEach(key => {
this[key] = data[key]
});
}
}
您必须确保输入数据对象仅具有正确的属性,根据数据源,这可能很容易,也可能不容易。我在问题中看到的主要问题是重复。构造函数中的所有属性都是重复的,这违反了干净代码的干燥原则 如果要以更简洁的方式填充域对象的新实例,可以执行以下操作:
export class TestModel1 {
public currentPage: number;
public hasNext: boolean;
public hasPrev: boolean;
public pageSize: number;
public totalItems: number;
constructor(data: any) {
Object.keys(data).forEach(key => {
this[key] = data[key]
});
}
}
您必须确保输入数据对象仅具有正确的属性,根据数据源,这可能很容易,也可能不容易。对于我的示例,我是这样做的:new TestModel1(数据);然后设置类的数据属性。那么你的意思是我做得正确,只是不设置属性的默认值?@AngularM这是正确的方法。但是如果你想有一些默认值,你也可以在构造函数中添加else cause并在那里设置默认值。@AngularM是的,这就是我的意思:)可能更好,而不是使用接口data:any=null,这样你就可以执行data:testinterface对于我的示例,我执行:newtestmodel1(data);然后设置类的数据属性。那么你的意思是我做得正确,只是不设置属性的默认值?@AngularM这是正确的方法。但是,如果您想有一些默认值,您也可以在构造函数中添加else cause并在那里设置默认值。@AngularM是的,这就是我的意思:)可能是应该更好,而不是使用接口data:any=null,这样您就可以执行data:TestInterface