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