gpt4 book ai didi

java - 基于逻辑从不同来源加载数据的设计模式建议

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:58:50 24 4
gpt4 key购买 nike

我目前正在阅读设计模式及其用途。我正在尝试寻找一种设计模式来重构我当前的代码。

问题:

将来自多个不同来源的数据以特定顺序加载到一个大型 JavaBean 中。数据是根据一些简单的初始标准加载的。从第一个来源返回的数据将为下一个来源建立标准。

某些数据源可能没有返回任何数据。这可能不会停止加载到 JavaBean 中的过程,但基于某些逻辑,加载过程可能会跳过某些数据源,因为它没有足够的条件来查询。

当前解决方案:

BigJavaBean Class

每个加载器类都包含访问每个源 DAO 的方法

对每个 DAO 的查询是根据 BigJavaBean 中的属性构建的

每个加载器类中都有逻辑来确定它是否“已加载”

LoaderClassDataBase for BigJavaBean

LoaderClassFlatFiles for BigJavaBean

LoaderClassXmlFiles for BigJavaBean

LoaderClassWebService for BigJavaBean

... and so on

MainLogicClass

BigJavaBean bigJavaBean = new BigJavaBean();

populateBigBeanMethod() {

loaderClassDataBase(bigJavaBean);

if (loaderClassDataBase.isLoaded()) {
loaderClassFlatFiles(bigJavaBean);

if (loaderClassFlateFile.isLoaded() {
loaderClassXmlFiles(bigJavaBean);
}
}

... more if statements


}

谢谢。

最佳答案

这是 Chain Of Responsibility pattern

abstract class BigJavaBeanLoader {
private final BigJavaBeanLoader successor;

public BigJavaBeanLoader() {
this.successor = null;
}

public BigJavaBeanLoader(BigJavaBeanLoader successor) {
this.successor = successor;
}

public void loadData(BigJavaBean bean) {
if (this.loadDataFromSource(bean) && this.successor != null) {
this.successor.loadData(bean);
}
}

protected abstract boolean loadDataFromSource(BigJavaBean bean);

class DataBase extends BigJavaBeanLoader {
@Override
protected boolean loadDataFromSource(BigJavaBean bean) {
// do a database stuff
return true;
}
}

class FlatFiles extends BigJavaBeanLoader {
@Override
protected boolean loadDataFromSource(BigJavaBean bean) {
// do flat files stuff
return true;
}
}

}

BigJavaBean bigJavaBean = new BigJavaBean();
BigJavaBeanLoader loader;
loader = new BigJavaBeanLoader.FlatFiles();
loader = new BigJavaBeanLoader.DataBase(loader);
loader.loadData(bebigJavaBean);

关于java - 基于逻辑从不同来源加载数据的设计模式建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9704858/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com