8️⃣

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

2024/03/08に公開

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

7.4 問題が発生したら例外を投げる

取得でも、タスクにおいてでも何においても共通のこと。

// 例外を投げる
throw new Error('Something bad happened');

7.5 情報を収集するためにクエリを使用し、その次のステップに進むためにコマンドを使用する

クエリメソッド:副作用を持たないメソッド
コマンドメソッド:副作用を持つメソッド
以下のように書ける。

function changeUserName(userId: string, newName: string): void {
  const user = userRepository.find(userId);
  user.changeName(newName);
  userRepository.save(user);
  this.eventDispatcher.dispatch(new UserNameChangedEvent(user.id, newName));
}

ただ、以下のように同じオブジェクトに対してクエリメソッドを呼び出し、その後にコマンドメソッドを呼び出すことは避けるべき。

if (wall.isOnTheRight()) {
  player.moveLeft();
} elseif (wall.isOnTheLeft()) {
  player.moveRight();
}

このような場合、以下のようにリファクタリングすると、どのような処理を行っているかが明確になる。

player.evade();

Discussion