【发布时间】:2015-08-29 00:38:44
【问题描述】:
我正在尝试用 Java 制作一个小型 DSL,我可以用它来填充数据库中的测试数据。我想使用的语言如下。
createRowInTableA().
createRowInTableB().
createRowInTableA().
createRowInTableB().
createRowInTableC().
end();
创建表的顺序很重要,例如 tableB 依赖于 tableA,tableC 依赖于 tableA 和 tableB。因此,我想使创建 tableB 的选项在创建 tableA 等之后直接可用。我已经开始创建描述 DSL 的接口,但我不知道我应该如何实际实现接口以使我正在寻找的嵌套行为类型。这就是界面的样子。
public interface End {
public void sendTestData();
}
public interface TableA extends End {
public Builder createRowInTableA();
}
public interface TableB extends TableA {
public Builder createRowInTableB();
}
public interface TableC extends TableB {
public Builder createRowInTableC();
}
但是,当我开始使用构建器模式来实现这种语言以创建流畅的 API 时,我想要的层次结构消失了。
public class DBBuilder implements TableC {
static class Builder {
public Builder createRowInTableA(){...}
public Builder createRowInTableB(){...}
public Builder createRowInTableC(){...}
}
}
【问题讨论】:
-
你可以有很多构建器类,每个类都有一组有限的方法;并且一个方法可能会返回另一个构建器类型。这可能会变得太复杂,而且可能不值得。