Я пытаюсь создать абстракцию для SearchService с использованием шаблона Cake. Это то, что я в настоящее время:Тестирование клиента базы данных в шаблоне торта
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
}
}
Проблема у меня с вышесказанным является то, что
Я инициализировал экземпляры клиента lucene и клиента db в реализациях Service.
В идеале я хотел бы «смешивать в» а «Клиент» базовый тип, который может быть либо клиент Db или клиент Lucene, но я очень путать о том, как вводить тип здесь полиморфный клиент.
Может кто-нибудь указать, как я могу реорганизовать код, чтобы я мог вставлять разные версии клиента в мои реализации признака SearchService?
Спасибо за пример. Я предполагаю, что это больше похоже на абстрагирование инициализации клиента для DB и Lucene. Поскольку у DB и Lucene есть разные клиентские реализации, я не могу придумать способ иметь абстрактный «клиент», который может использоваться как для DB, так и для Lucene. У меня есть эта жесткая зависимость от этих клиентов, с которыми я не могу обойтись. –
[Daniel Spiewak] (http://www.youtube.com/watch?v=yLbdw06tKPQ) показывает хороший способ использования признаков для инициализации и выключения в [этом разговоре] (http://www.youtube.com/watch ? v = yLbdw06tKPQ). Что касается абстракции клиентов, я полагаю, вы работаете с такими объектами, как пользователи, службы и т. Д.? Они должны быть относительно легко абстрагироваться, независимо от DB или Lucene. Не могли бы вы привести пример? Боюсь, я до сих пор не получил то, что вам нужно (без обид). – fotNelton