关于Angular模型的良好实践是什么?

问题描述 投票:0回答:1

我想在Angular应用中显示一台洗衣机。为此,我创建了一个Machine模型:

import { User } from './user.model';

export class Machine {
  id: number;
  type: string;
  pricing: string;
  enableDurationSelection: boolean;
  maxDuration: number;
  costPerCycle: number;
  elapsedTime?: number = 0;
  user?: User;
}

和机器用户:

export class User {
  id: number;
  firstName?: string;
  lastName: string;
  balance: number;

  getUsername(): string {
    let username = '';
    if (this.firstName) {
      username += this.firstName[0] + '. ';
    }
    username += this.lastName.toUpperCase();
    return username;
  }
}
  1. 如何为User模型执行鸭子输入?的getUsername()属性似乎破坏了它。

  2. 我想在机器上添加一个计时器,以显示周期。我可以将startTimer()stopTimer()属性添加到我的Machine模型,但还需要其他属性,例如Observer与机器数据无关,也将破坏鸭子的输入。

处理这种情况的推荐方法是什么?

angular typescript
1个回答
0
投票

似乎您想使用对象符号创建对象实例将所有字段,并且您认为应该以某种方式将方法添加到创建的对象中。

最接近的替代方法是向该类添加一个构造函数,该构造函数接受一个包含字段初始值的对象:

interface MachineOptions {
    id : number;
    type: string;
    ...
}

export class WashingMachine {
    // field declarations here

    public constructor(options: MachineOptions) {
        // copy options to instance's fields here
    }
}


const machine = new WashingMachine({
    id: 1,
    type: 'm-type1',
    ...
})

我还建议在此处避免将类作为接口实现(例如class WashingMachine : IMachineOptions),以便您可以隐藏实现详细信息(内部字段语义可能与选项不同。

© www.soinside.com 2019 - 2024. All rights reserved.