2015-04-01 5 views
0

Я действительно застрял здесь. Я пытаюсь добавить новую базу данных в дополнение к текущей. Я собираюсь использовать шаблон фабрики, чтобы выбрать правильный контроль базы данных, как это:Редизайн поисковой системы, какие шаблоны дизайна применяются

private AssetStoresFactory assetStoresFactory; 

AssetStore assetStore = assetStoreFactory.getAssetStore(query); 
assetStore.search(search); 

public AssetStore getAssetStore(String query){ 
AssetStore assetStore; 
if (qualifiesForStoreA(query)) 
    assetStore = new AssetStoreA(); 
else 
    assetStore = new AssetStoreB(); 
return assetStore; 
} 


AssetStore A 
..... 
Results search(AssetSearch search) { 
AssetSearchOperation o = new AssetSearchOperationA(search); 
} 
..... 


AssetStore B 
..... 
Results search(AssetSearch search) { 
AssetSearchOperation o = new AssetSearchOperationB(search); 
} 
..... 

Теперь реальная проблема лежит здесь. В настоящее время подход для выполнения поиска, как это:

    _______________________ 
        | BaseSearchOperation | 
        | ___________________ | 
        | abstract search() | 
        ----------------------- 
          ᴧ 
          | 
        ____________________ 
        | StreamingSupport | 
        |__________________| 
          ᴧ 
          | 
        ______________________ 
        |AssetSearchOperation| 
        |____________________| 

Теперь есть код для запроса текущей базы данных во всех указанных выше классов, и это должно быть удалено и изолированы. Я не могу понять, как это можно сделать. Обратите внимание, что анонимные реализации AssetSearchOperation переопределяют StreamingSupport. Любая помощь приветствуется! Если вам нужна дополнительная информация, пожалуйста, спросите!

+0

Возможно, «BaseSearchOperation» должен быть агрегированным по базе данных и где весь общий код, с подклассами для специфики. Трудно сказать, что код действительно загадочен, и вы не придаете большого значения контексту. – guillaume31

ответ

0

Parametrize AssetStore конструктор с экземпляром подключения к базе данных и передает конкретный экземпляр внутри вашего заводского метода.

Смежные вопросы