0

我有以下要求,我需要公开一个 API,用户可以在其中发送一个自由形式的“查询”,如表达式,我需要返回真/假。例如:对于汽车对象,如果查询是

" (make = 'FORD' AND year IN (1990,1991)) OR type = 'SUV') ".

但是,“make”、“year”或“type”来自外部填充的表。

TABLE CAR_PROPERTIES (
 propertyName VARCHAR2(40),
 propertyValue VARCHAR2(10)
)

我首先遍历了其他连接表以加载属性。

所以,如果有新的属性(和对应的值),我需要在查询中支持。

到目前为止,这就是我所做的:

  1. 如果不需要向类添加动态属性,我知道我可以在我的集合上使用 JoSQL 之类的东西。

  2. 一旦应用程序开始使用 Java Tools API 或 javaassist,我就开始研究动态创建类。

客户坚持使用不需要添加新属性和部署代码的解决方案(尽管此 API 的“调用者”确实需要更改代码才能在查询中使用新属性)。

我不喜欢动态创建新类。寻找任何指示或解决方案。

4

1 回答 1

2

Raj - 为您的设计提供一些建议和灵感:

  1. 甚至不会进行完整的 O/R 映射。我会考虑将您的领域特定语言翻译成 SQL。我在 Python 中做过这样的事情。这要容易得多,因为您正在两种简单语言(自定义 DSL 和 SQL)之间进行语言到语言的翻译。使用健壮的正则表达式,您可以拥有一个非常简洁且强大的框架来处理此类交互。(参见Regex Table Lexer和其他模式)

  2. 有一些有趣的设计可供研究:

  3. 对于动态关系和属性表达式,我建议(嵌入)图形数据结构这是一个有用的教程,显示相对图映射:
    http
    : //py2neo.org/tutorials/tables_to_graphs 和一个关于 Neo4J 的教程,我用于类似目的:
    http ://docs.neo4j.org/chunked/stable/tutorials.html

于 2012-08-02T01:30:53.050 回答