child class 应该维护一个集合,如何将其范围绑定到 parent 的 class 方法?
A child class should maintain a collection, how to bind its scope to a parent's class method?
我有两个共享相同流程的 classes:我需要从数据库获取信息,处理它并在 nosql 数据库上更新它。
差异非常小:在一种情况下,我确定我只会为每个 nosql 记录获取一个实体,因此我可以处理它们,将它们临时存储在列表中,然后获取列表中的所有项目处理实体后。
在第二种情况下,每个索引记录可以有多个实体。在这种情况下,我必须重新检索当前处理的数据、合并和存储。在处理完每个实体后,我可以获得 map.values() 以便我可以更新到 nosql。
正如所见,区别仅在于项目的处理方式和数据结构的临时存储方式。
我的 parent class 有这样的东西:
public void run()
{
process();
sendToNosql(getProcessed())
}
protected abstract void process();
protected abstract List<Stuff> getProcessed();
简单的children是这样的:
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是一个object属性。这很好用。
但是因为这些是无状态 bean,所以我只有在 运行() 方法中时才安全,如果调用任何其他方法,myStuff 属性不可靠。
我想避免这种风险,所以我想将 运行() 方法作为 myStuff 属性范围。我如何在抽象底层数据结构的同时改进我的架构以实现这一目标?
还是这个问题告诉我我做错了什么?
有关信息以防有人发现此问题:
我使用了 State pattern,所以子进程 class 会在进程方法启动时生成一个状态。状态隐藏了信息的存储方式(散列或列表)。
我有两个共享相同流程的 classes:我需要从数据库获取信息,处理它并在 nosql 数据库上更新它。
差异非常小:在一种情况下,我确定我只会为每个 nosql 记录获取一个实体,因此我可以处理它们,将它们临时存储在列表中,然后获取列表中的所有项目处理实体后。
在第二种情况下,每个索引记录可以有多个实体。在这种情况下,我必须重新检索当前处理的数据、合并和存储。在处理完每个实体后,我可以获得 map.values() 以便我可以更新到 nosql。
正如所见,区别仅在于项目的处理方式和数据结构的临时存储方式。
我的 parent class 有这样的东西:
public void run()
{
process();
sendToNosql(getProcessed())
}
protected abstract void process();
protected abstract List<Stuff> getProcessed();
简单的children是这样的:
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是一个object属性。这很好用。 但是因为这些是无状态 bean,所以我只有在 运行() 方法中时才安全,如果调用任何其他方法,myStuff 属性不可靠。
我想避免这种风险,所以我想将 运行() 方法作为 myStuff 属性范围。我如何在抽象底层数据结构的同时改进我的架构以实现这一目标? 还是这个问题告诉我我做错了什么?
有关信息以防有人发现此问题: 我使用了 State pattern,所以子进程 class 会在进程方法启动时生成一个状态。状态隐藏了信息的存储方式(散列或列表)。