自定义 Java 查询类 (DSL):生成器模式、静态导入还是用于复杂查询的其他内容?方法和/或/非查询概括
我正在创建一个自定义查询类,我不确定编写它的最优雅方法。
目标是:
- 简单易用
- 扩展
- 灵活,以便可以制定复杂的查询
方法
目前我可以想到两种选择。
1. 生成器模式
Result r = new Query().is("tall").capableOf("basketball").name("michael").build();
这些方法,并返回对该对象的自引用。 将返回一个对象。is()
capableOf()
name()
Query
build()
Result
2. 静态导入
Result r = new Query(is("tall"), capableOf("basketball"), name("michael"));
方法 ,是静态导入和返回对象。Query 构造函数采用任意数量的条件并返回结果。is()
capableOf()
name()
Condition
和/或/非查询
如下所示的更复杂的查询的表述很复杂:
高大的篮球运动员名叫[迈克尔·奥丹尼斯]
联盟
弯曲有光泽的银勺
生成器模式:
Result r = new Query().is("tall").capableOf("basketball").or(new Query().name("michael"), new Query().name("dennis")).
union(
new Query().color("silver").a("spoon").is("bent").is("shiny")
).
build();
这很难编写和阅读。另外,我不喜欢多次使用。new
静态导入:
Result r = new Query(is("tall"), capableOf("basketball"), or(name("michael"), name("dennis"))).
union(color("silver"), a("spoon"), is("bent"), is("shiny"));
对我来说看起来更好,但我真的不喜欢使用静态导入。它们在ide集成,自动完成和文档方面很困难。
概括
我正在寻找一个有效的解决方案,因此我对任何类型的建议都持开放态度。我不仅限于我提出的两种选择,如果有其他可能性,如果你告诉我,我会很高兴。如果您需要更多信息,请通知我。