Java 子类应该维护集合,如何将其作用域绑定到父类的类方法?

Java 子类应该维护集合,如何将其作用域绑定到父类的类方法?,java,architecture,Java,Architecture,我有两个类共享相同的流:我需要从数据库中获取信息,处理它并在nosql数据库中更新它 差别非常小:在一种情况下,我确信每个nosql记录只会获得一个实体,因此我可以只处理它们,将它们临时存储在列表中,然后在处理实体后获得列表中的所有项目 在第二种情况下,每个索引记录可以有多个实体。在这种情况下,我必须检索当前处理的数据、合并并再次存储。在处理每个实体之后,我能够获得map.values,以便更新到nosql 如图所示,区别仅在于如何处理项以及如何临时存储数据结构 我的父类有如下内容: publi

我有两个类共享相同的流:我需要从数据库中获取信息,处理它并在nosql数据库中更新它

差别非常小:在一种情况下,我确信每个nosql记录只会获得一个实体,因此我可以只处理它们,将它们临时存储在列表中,然后在处理实体后获得列表中的所有项目

在第二种情况下,每个索引记录可以有多个实体。在这种情况下,我必须检索当前处理的数据、合并并再次存储。在处理每个实体之后,我能够获得map.values,以便更新到nosql

如图所示,区别仅在于如何处理项以及如何临时存储数据结构

我的父类有如下内容:

public void run()
{
    process();
    sendToNosql(getProcessed())
}

protected abstract void process();
protected abstract List<Stuff> getProcessed();
List<Stuff> myStuff = new ArrayList<>();
@Override
protected void process()
{
    for(Entity e : loadFromDB()){
        myStuff.add(process(e));
    }
}

@Override
protected List<Stuff> getProcessed(){
    return myStuff;
}
简单的孩子是这样的:

public void run()
{
    process();
    sendToNosql(getProcessed())
}

protected abstract void process();
protected abstract List<Stuff> getProcessed();
List<Stuff> myStuff = new ArrayList<>();
@Override
protected void process()
{
    for(Entity e : loadFromDB()){
        myStuff.add(process(e));
    }
}

@Override
protected List<Stuff> getProcessed(){
    return myStuff;
}
而复杂的一点是:

Map<int, Stuff> myStuff = new HashMap<>();
@Override
protected void process()
{
    for(Entity e : loadFromDB()){
        myStuff.put(e.getId(), process(e));
    }
}

@Override
protected List<Stuff> getProcessed(){
    return myStuff.values();
}
因为一切都将被处理,结果将在以后使用,所以myStuff是一个对象属性。这个很好用。 但是因为这些是无状态bean,所以我只有在run方法中才是安全的,如果调用任何其他方法,myStuff属性就不可靠

我希望避免这种风险,因此我希望将run方法作为myStuff属性作用域。在抽象底层数据结构的同时,如何改进体系结构以实现这一点?
还是这个问题告诉我我做错了什么?

如果有人发现这个问题,请参考:
我使用了,所以子类在process方法启动时生成一个状态。状态隐藏了信息在哈希或列表中的存储方式

单个记录仍然是一个列表。即使您知道集合将处理单个记录,也不可能只期望一个集合?可以让每个子级都使用映射,但这似乎很奇怪,因为大多数情况都是简单的,所以很多类在可以使用简单结构时会使用映射,因为复杂的类需要它。您提出的是一种可能的解决方案,但如果每个类都能独立定义自己的临时存储,我会更高兴。我明白了,但您必须首先回答一件事:数据更改中的维护问题| | entity两个类都需要更改吗?如果它需要在这两个类中进行维护,那么它会做出更改,将所有内容封装在一个更通用的类中。此外,如果复杂的情况更不寻常,你可以考虑做倒数:把它包在一个类中,我会调用单个的多个时间,它们适用于数据库中的不同实体。实体中的更改可能会导致从一个实体解析到另一个实体的方法上的类发生更改。业务流程的更改可能会影响整个导入流程。对不起,我不太明白你所说的“一节课”是什么意思。我会给一节课打很多电话