Cake パターンを使用して SearchService の抽象化を作成しようとしています。これは私が現在持っているものです:
trait SearchServiceComponent{
val searchService:SearchService
trait SearchService{
def searchForSomething(..):List[String]
def updateIndex(..):Boolean
}
}
次のように、DbSearchServiceComponent と LuceneSearchServiceComponent があるとします。
trait DbSearchServiceComponent extends SearchServiceComponent{
class DbSearchService extends SearchService{
//Initialize the db client
//Implement all the trait methods
}
}
同様に...
trait LuceneSearchServiceComponent extends SearchServiceComponent{
class LuceneSearchService extends SearchService{
//Initialize the lucene client
//Implement all the trait methods
}
}
上記のスニペットで私が抱えている問題は、
Service 実装で lucene クライアントと db クライアントのインスタンスを初期化しました。
理想的には、Db クライアントまたは Lucene クライアントのいずれかになる「クライアント」基本タイプを「ミックスイン」したいのですが、ここでポリモーフィック クライアント タイプを注入する方法についてかなり混乱しています。
SearchService トレイトの実装にさまざまなバージョンのクライアントを挿入できるように、コードをリファクタリングする方法を誰かが指摘できますか?