我有一个从 WSDL 生成的父类 ProcessDefinition。它有十几个组件类。我的要求是:
- 从数据库中提取现有定义
- 将新定义插入数据库
- 更新数据库中的现有定义(可能需要对定义的组件进行插入、更新、删除)
- 从数据库中删除定义
提取很容易,因为我检查数据库是否存在每个组件,如果存在则添加到定义中。为此,我打算使用带有方法的接口
public interface ComponentDAO
{
public void addComponentToDefinition(ProcessDefinition definition, String environmentName);
}
我将为每个组件提供一个实现,如果存在,它将从数据库中提取其组件信息,创建所需的类并将其设置在定义中。
在春天,我将配置该接口的列表并插入每个实现,然后在我的主 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 列表,不需要类型转换,但编译器无法进行完整的类型检查并导致有关参数化的警告原始类型。
是否有我应该为此使用的设计模式?假设我忽略了休眠或任何其他 ORM 框架。