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