Scala での DI の関数と Cake パターンの使用の違いについて疑問に思っていました。私は次のような理解に達しました。この理解が正しいかどうか知りたいです。
依存関係グラフを想像してみましょう。
1) 関数を構成要素として使用すると、グラフはノードとしての関数とエッジとしてのパラメーターで構成されます。
2) (Cake のように) 構成要素として特性を使用する場合、グラフはノードとしての特性とエッジとしての抽象メンバーで構成されます。
Cakeパターンの目的は何ですか?2 が 1 より優れているのはなぜですか? コースグレイニングです。グラフ 1 は、関数を特性にグループ化することで単純化できます。これにより、より小さく、より理解しやすいグラフ 2 が得られます。関連する概念のグループ化/クラスター化は、圧縮の一種であり、理解を生み出します (理解を得るために頭の中で保持する必要があるものを減らす必要があります)。
別の比較を次に示します (Cake とパッケージ システムの比較):
Cake は関連する関数をパッケージにグループ化することに似ていますが、名前空間 (パッケージ/オブジェクト) を使用すると依存関係が固定化されるため、パッケージ/オブジェクトを特性に置き換え、import
s を自己型の注釈/抽象メンバーに置き換えます。パッケージと Cake パターンの違いは、依存関係の実際の実装は Cake を使用して変更できますが、パッケージを使用する場合は変更できないことです。
これらのアナロジーが意味をなすかどうかはわかりません。私はまだ Cake パターンと、それを私が既に理解している概念 (関数、パッケージ) に関連付ける方法に頭を悩ませようとしています。