Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何正确创建角度域模型_Javascript_Angular_Typescript_Oop - Fatal编程技术网

Javascript 如何正确创建角度域模型

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 =

我想正确地创建一个域模型

我在下面的尝试在构造函数外部创建属性。 我应该只在构造函数中创建和设置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;
  }
}
它看起来有点大,代码行太多了

目前我需要传入一个数据对象,然后映射。
对于我来说,使用构造函数更好地实现这一点,它们是一种聪明的方法吗?

如果我们谈论模型类,其声明应该如下面的示例所示:

导出类帐户{
建造师(
公共激活:布尔,
公共当局:字符串[],
公共电子邮件: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