WSDLから生成された親クラスProcessDefinitionがあります。ダース以上のコンポーネントクラスがあります。私の要件は次のとおりです。
- データベースから既存の定義を抽出します
- データベースに新しい定義を挿入します
- データベース内の既存の定義を更新します(definitinのコンポーネントの挿入、更新、削除が必要になる場合があります)
- データベースから定義を削除します
データベースで各コンポーネントの存在を確認し、存在する場合は定義に追加するため、抽出は簡単です。このために、私はメソッドを持つインターフェースを使用するつもりです
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のリストをraw型で定義する必要があります。型キャストは必要ありませんが、コンパイラは完全な型チェックを実行できず、パラメータ化に関する警告が表示されます。生のタイプ。
これに使用すべきデザインパターンはありますか?休止状態またはその他のORMフレームワークを見落としていると仮定します。