9️⃣

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

2024/02/09に公開

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

3.3 無効な引数の例外にカスタム例外クラスを使用しない

大抵の場合は、ただのプログラミングのミスだよね。という話。

3.4 例外のメッセージを分析することで、特定の無効な引数例外をテストする

テストで例外の内容までしっかり確認しよう。という話。

3.5 ドメイン不変条件が複数の箇所で検証されるのを防ぐために、新しいオブジェクトを抽出する

NG: 以下のように、各所でバリデーションをおこなっているケース

class User {
  private email: string
  constructor(email: string) {
    if (email.length === 0) {
      throw new Error("err")
    }
    this.email = email
  }

  changeEmail(email: string) {
    if (email.length === 0) {
      throw new Error("err")
    }
    this.email = email
  }
}

OK: 以下のように、Emailを切り出し、すでに信頼された値として使おう。ということ。

class Email {
  private email: string
  constructor(email: string) {
    if (email.length === 0) {
      throw new Error("err")
    }
    this.email = email
  }
}

class User {
  private email: Email
  constructor(email: Email) {
    this.email = email
  }

  changeEmail(email: Email) {
    this.email = email
  }
}

いわゆるバリューオブジェクト的な概念になる。
指針として、「あらゆるstringやintを受け取って良いか?」がNoの場合は導入しても良さそう。

Discussion