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