5️⃣

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

2024/02/05に公開

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

2.8 タスクに関連するデータはメソッド引数として渡す

使いわましの観点だと、constructorでタスクに関連するデータを渡してしまうと利便性が落ちてしまうよね、、、という話。

class NG_EntityManager {
  constructor(private entity: Object) {}

  save() {
    // ...
  }
}

const user = new User()
let entity = new NG_EntityManager(user)
entity.save()

const comment = new Comment()
entity  = new NG_EntityManager(comment) // 再度新スタンス生成しないといけない
entity.save()
class OK_EntityManager {
  constructor() {}

  save(private entity: Object) {
    // ...
  }
}

const user = new User()
const entity = new NG_EntityManager()
entity.save(user)

const comment = new Comment()
entity.save(comment)

2.9 サービスをインスタンス化したら、振る舞いは変更しない

イミュータブルにしないと予期しないエラーが出るよね、、、という話。

class NG_Error {
    constructor(public ignore: boolean) {}

    log() {
        if (this.ignore) return

        // ...
    }
}

const err = new NG_Error(false)
err.log() // エラーが出る
err.ignore = true
err.log() // エラーが出ない

Discussion