8️⃣

[読書メモ]オブジェクト設計スタイルガイド 4章8節 with TypeScript

2024/02/18に公開

オブジェクト設計スタイルガイドを読みながら、TypeScriptでやるならどうやるかを考えながら書きました。
要約的に読める内容になっていると思うので、サクッと3分ぐらいで読める記事となっています。
https://www.oreilly.co.jp/books/9784814400331/

4.8 オブジェクト全体の比較

テストのためだけにgetterを用意するのはあまり推奨されない。

class Position {
  constructor(private _x: number, private _y: number) {}

  private clone() {
    return new Position(this._x, this._y);
  }

  get x() {
    return this._x;
  }

  // 例のためのメソッド
  moveLeft(steps: number) {
    this._x = this._x - steps;
  }

  toTheLeft(steps: number) {
    let copy = this.clone();
    copy._x = copy._x - steps;
    return copy;
  }
}

// ミュータブルなメソッドの場合
test("it_can_move_to_the_left", () => {
  const position = new Position(7, 10);
  position.moveLeft(5);

  expect(position.x).toEqual(2);
});

// イミュータブルなメソッドの場合
test("it_can_move_to_the_left", () => {
  const position = new Position(7, 10);
  const nextPosition = position.toTheLeft(5);

  expect(nextPosition).toMatchObject(new Position(2, 10));
});

Discussion