【问题标题】:Redesigning a search engine, what design patterns to apply重新设计搜索引擎,应用哪些设计模式
【发布时间】:2015-06-05 19:27:12
【问题描述】:

我真的被困在这里了。我正在尝试在当前数据库之外添加一个新数据库。我将使用工厂模式来选择正确的数据库控件,如下所示:

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。 任何帮助表示赞赏!如果您需要更多信息,请询问!

【问题讨论】:

  • 也许BaseSearchOperation 应该与数据库无关,并且所有通用代码都在其中,并带有用于具体细节的子类。很难说,代码真的很神秘,而且你没有给出很多上下文。

标签: design-patterns architecture factory command-pattern


【解决方案1】:

使用数据库连接实例参数化AssetStore 构造函数,并在您的工厂方法中传递特定实例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    相关资源
    最近更新 更多