8️⃣
[読書メモ]オブジェクト設計スタイルガイド 4章8節 with TypeScript
オブジェクト設計スタイルガイドを読みながら、TypeScriptでやるならどうやるかを考えながら書きました。
要約的に読める内容になっていると思うので、サクッと3分ぐらいで読める記事となっています。
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