我要正确创建域模型。
我在下面的尝试在构造函数之外创建属性。 我应该只在构造函数内部创建和设置TestModel类的属性吗?这样,他们的代码行会更少
我尝试了以下我认为正确的尝试:
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;
}
}
似乎有点大,太多的代码行。
当前,我需要传递一个数据对象,然后进行映射。 他们是我使用构造函数更好地实现此目的的聪明方法吗?
答案 0 :(得分:2)
如果我们谈论模型类,则其声明应类似于以下示例:
export class Account {
constructor(
public activated: boolean,
public authorities: string[],
public email: string,
public firstName: string,
public langKey: string,
public lastName: string,
public login: string,
public imageUrl: string
) {}
}
当然,您不应在构造函数之外定义值。您可以像在示例中一样声明模型类成员,但是没有定义值:
export class TestModel1 {
public currentPage: number;
public hasNext: boolean;
public hasPrev: boolean;
public pageSize: number;
public totalItems: number;
constructor(data: any = null) {
if(data !== null) {
this.currentPage = data.currentPage;
this.hasNext = data.hasNext;
this.hasPrev = data.hasPrev;
this.pageSize = data.pageSize;
this.totalItems = data.totalItems;
}
}
}
如果要声明默认值,我的建议是在构造函数内执行此操作,以获取干净,优质的代码。
更新:
export class TestModel1 {
public currentPage: number;
public hasNext: boolean;
public hasPrev: boolean;
public pageSize: number;
public totalItems: number;
constructor(data: any = null) {
if(data !== null) {
this.currentPage = data.currentPage;
this.hasNext = data.hasNext;
this.hasPrev = data.hasPrev;
this.pageSize = data.pageSize;
this.totalItems = data.totalItems;
}
else {
this.currentPage = 0;
this.hasNext = false;
this.hasPrev = false;
this.pageSize = 0;
this.totalItems = 0;
}
}
}
如果您希望使用默认值,那会更好
答案 1 :(得分:0)
我在问题中看到的主要问题是重复的问题。所有属性都在构造函数中重复,这违反了干净代码的DRY原理。
如果您想以更简洁的方式填充域对象的新实例,则可以执行以下操作:
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]
});
}
}
您必须确保输入数据对象仅具有正确的属性,这取决于数据源,这可能容易,也可能不容易。