3

TL;DR: Spring IoC で Builder パターンの構成を使用するにはどうすればよいですか?

一部のフィールドの分布パラメーターに基づいてテーブルにデータを入力する Spring プロジェクトを作成しています (つまり、レコードの 50% がタイプ A、タイプ B の 40%、タイプ C の 10% である必要があります。タイプごとに 50% がサブタイプでなければなりません)。 1、サブタイプ 2 の 20%、サブタイプ 3 の 10% など)。

レコードの作成を高速化するために、これらのパラメーターの分布を計算し、RecordBuilder のリストを返す RecordFactory があります。各 RecordBuilder は Callable インターフェースを拡張して、レコードを同時に処理して返すようにします。

活動図

これまでに行ったことは、タイプ A、B、および C だけを考慮して、タイプごとに異なる ProcessorFactory 実装を返す TypeABuilder、TypeBBuilder、および TypeCBuilder を作成することでした。

public class RecordFactory {
    @Inject
    private transient TypeABuilder aBuilder;
    @Inject
    private transient TypeBBuilder bBuilder;
    @Inject
    private transient TypeCBuilder cBuilder;

    public List<DataBuilder> getBuilders() {
        // calculates distribution for each type and add the builders accordingly
    }
}

しかし、明らかに、これは悪い設計です。プロジェクトがより複雑になると、可能な組み合わせごとに mxn クラスが必要になります。

より良い設計は、構成を使用し、必要なパラメーターに従って DataBuilder を作成することです。Spring IC の利点を失わずにこれを行うにはどうすればよいですか?


アップデート:

RecordFactory が ProcessorFactory を構築する方法を変更しました。個別の Builder オブジェクトの代わりに、必要に応じて Builder パターンを使用して ProcessorFactory を作成する 1 つの Builder オブジェクトがあります。

@Component
@Scope("prototype")
public class Builder {
    private Type type;
    private Subtype subtype;

    public Builder setType(Type type) {`
        this.type = type;
        return this;
    }

    public setSubtype(Subtype subtype) {
        this.subtype = subtype;
        return this;
    }

    public ProcessorFactory createFactory() {
        return new ProcessorFactoryImpl(this);
    }
}

public class ProcessorFactoryImpl {
    @Inject
    private transient TypeProcessor typeProcessor;

    @Inject
    private transient SubtypeProcessor subtypeProcessor;

    public ProcessorFactoryImpl(Builder builder) {
        typeProcessor.setType(builder.getType());
        processors.add(typeProcessor);
        subtypeProcessor.setSubtype(builder.getSubtype());
        processors.add(subTypeProcessor);
    }
}

今私の問題は次のとおりです。ビルダーで新しい ProcessorFactoryImpl を作成すると、プロセッサを挿入できません。そのような柔軟性を維持しながら、Spring でビルダー パターンを使用するにはどうすればよいですか?

4

0 に答える 0