だいちゃんも言ってますが、DefaultCheckConstraintModel を作るのであれば DefaultCheckConstraintModelBuilder を作る時点で CheckConstraintModelBuilder 型で受け取る必要性が感じられないです。 あと実装の問題もあって、どの時点から Abstract Builder の VO 型を決定付けようか、という点。 ...
だいちゃんも言ってますが、DefaultCheckConstraintModel を作るのであれば DefaultCheckConstraintModelBuilder を作る時点で CheckConstraintModelBuilder 型で受け取る必要性が感じられないです。
あと実装の問題もあって、どの時点から Abstract Builder の VO 型を決定付けようか、という点。
現在の実装だと、例えば DefaultForeignKeyConstraintModelBuilder の階層は
ValueObjectBuilder -> ConstraintModelBuilder -> KeyConstraintModelBuilder -> ForeignKeyConstraintModelBuilder -> DefaultForeignKeyConstraintModelBuilder
になっていますが、DefaultPrimaryKeyConstraintModel の階層は
ValueObjectBuilder -> ConstraintModelBuilder -> KeyConstraintModelBuilder -> DefaultPrimaryKeyConstraintModelBuilder
となっています。
ここで、KeyConstraintModelBuilder の時点で VO 型を決定付けると、ForeignKeyConstraintModelBuilder#setXxx() の addConfigurator(new BuilderConfigurator<S>(){}) になっている部分の S が変えられようにも変えられないんですよ。
DefaultPrimaryKeyConstraintModelBuilder の前に PrimaryKeyConstraintModelBuilder を作れと言ってしまえばそれまでなんですが、実装が何もないクラスになります。
中身が空っぽのクラスがざっと増えるのはちょっと、と思ったので作らなかったんですが、どう思います?