从多个源检索数据时使用的设计模式

时间:2014-11-20 23:44:03

标签: design-patterns

如果我们从一个来源,有时从其他来源获取相同的数据,我的问题基本上就是应该使用的理想设计模式。来自多个来源的原因是因为当您计划从一个数据库移动到另一个数据库时,一个人希望将原始数据源的数据保留一段时间,直到第二个数据库变得稳定。因此,我们需要维护两种检索数据的方法,然后在两种情况下相应地格式化数据。

1 个答案:

答案 0 :(得分:2)

代理将是一种合理的方法 - 取决于您的具体情况;我必须强调,但从来没有真正的“理想方法”。不同的设计具有不同的优点和缺点。有时候一种方法适合你,有时它绝对没有意义。 因此,以下是我理解你的情况后我会遵循的一种可能的方法。

我们有两个问题 - 可以用两个问题来表达:我们如何从一个来源获取数据?我们如何确定从哪个来源获取数据?

首先让我们使用接口抽象实际数据;它将定义管理和访问数据的所有方法:

public interface Data
{
    // methods for administrating the data
}

让我们使用抽象来从源获取数据。为此,我们声明了一个接口:

public interface DataRetriever
{
    Data retrieveData();
}

我们将有两个实现此接口的对象,一个用于源a,一个用于源b,具体来说。毕竟,客户并不关心如何获取数据 - 客户只关心 获得的数据:

public class RetrieverA implements DataRetriever
{
    @Override
    public Data retrieveData()
    {
        //handle obtaining the data
    }
}

public class RetrieverB implements DataRetriever
{
    @Override
    public Data retrieveData()
    {
        // handle obtaining the data
    }
}

RetrieverA和RetrieverB实现DataRetriever接口,并将实现获取数据的实际代码。 接下来让我们定义实际的代理。代理将实现DataRetriever接口并存储对RetrieverA和RetrieverB的引用:

public class Proxy implements DataRetriever
{
    private final RetrieverA;
    private final RetrieverB;

    @Override
    public Data retrieveData()
    {
        // insert logic for deciding which source to get the data from
    }
}

retrieveData()方法实际上将定义何时检索DataRetriever的数据的逻辑。客户将获得数据,并可以使用它,很高兴。

我希望我能够最充分地回答你的问题。我建议四人帮的书,如果你还没有(这也是我的来源):

http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented-ebook/dp/B000SEIBB8

另外,有一个网站简要介绍了大多数模式:

http://www.oodesign.com/