「class内部でのinstantiateによる依存」をマシにする方法いくつか
Object間の依存の観点から、class内部で別のclassをinstantiateするのは良くない
という前提がある
状況設定
Aの内部でBを使っているとする
1.tsclass A {
hoge() {
const b = new B();
return b.piyo();
}
}
いくつかの回避策
DIして、そもそも外部でinstantiateする
2.tsclass A {
constructor(b: {piyo: () => number}) {
...
}
}
AとBの結合は完全に切り離されている
Aは「 piyo()
を持つやつを引数に取る」にのみ依存していることになる
(他のmethod内ではなく)constructor内でinstantiateする
3.tsclass A {
constructor() {
this.b = new B();
}
}
DIが無理なとき
Aが作られると無条件でBも作られてしまう
instantiate専用のmethodを用意する
4.tsclass A {
...
b() {
this.b = this.b || new B();
return this.b;
}
}
DIが無理なとき
Bが必要になったタイミングでBを作ることができる
3.ts
よりよい点
特に内部で new B()
をしている箇所が複数ある場合にマシさが増す
new B()
用のgetterみたいなイメージ

参考