我有一个从WSDL生成的父类ProcessDefinition。它有十几个组件类。我的要求是:
提取很简单,因为我检查数据库中是否存在每个组件,如果存在则添加到定义中。为此,我打算使用带有方法的接口
public interface ComponentDAO
{
public void addComponentToDefinition(ProcessDefinition definition, String environmentName);
}
我将为每个组件提供一个实现,它将从数据库中提取其组件信息(如果存在),创建所需的类并在定义中设置它。
在Spring中,我将配置该接口的列表并插入每个实现,然后在我的主DAO类中,我可以执行以下操作
ProcessDefinition definition = new ProcessDefinition()
definition.setProcessID(someID);
for (ComponentDAO c: this.getComponentDAOs)
{
c.addComponentToDefinition(definition);
}
这很容易扩展,如果添加新组件,则不需要我触摸任何现有的类。但是,在更新组件或创建新组件时,我需要知道组件类,即
public void update(ProcessComponentA component, String environmentName);
public void update(ProcessComponentB component, String environmentName);
使用泛型,我可以将界面定义为
public interface ComponentDAO<T>
{
public void addComponentToDefinition(ProcessDefinition definition, String environmentName);
public void updateComponent(T component);
}
这使得ComponentDAO实现保持干净,但是在调用接口的主类中我必须以原始类型定义ComponentDAO列表,不需要类型转换但是编译器不能完成类型检查并导致关于参数化原始类型的警告。
我应该使用哪种设计模式吗?假设我忽略了hibernate或任何其他ORM框架。