私は Scala の Cake パターンについて少し読んでいました (それが古いものであることは知っています)。具体的なクラスをロックダウンする方法を見たり想像したりできないため、依存関係が注入されたクラスから漏れることはありません。 .
シンプルで最新の例は、play-reactive-mongo-dbアクティベーター テンプレートからのものです。そのアプリでは、コントローラーはReactiveMongoComponents
トレイトを使用して driver のインスタンスを取得しますReactiveMongoApi
。
ここでの問題は、コントローラーの継承がインスタンスを返すパブリック メソッドを持っていることでreactiveMongoApi
あり、カプセル化と情報隠蔽という 2 つの基本原則を破っています。この例が良くないことはわかっていますが (コントローラーはデータ ストアにアクセスしてはならないため)、ドメイン サービスやリポジトリが存在する場合にも同じことが当てはまります。これらのクラス (ドメイン サービス、リポジトリなど) には、アクセス可能なメソッドを定義する特性があり、依存関係を取得するためのパブリック メソッド/属性がないことはわかっていますが、具体的な実装はリークします。
TL;DR: Cake パターンは具体的な実装から依存関係をリークします。これを回避するにはどうすればよいですか?