0

我正在尝试创建SQL查询对象的层次结构。我的基类将命名为 Query。它将具有类似的方法Query.setTable("tableName")

然后我打算让一个SelectiveQuery对象扩展 Query 对象。该对象将具有类似的方法SelectiveQuery.where("aColumn","=","123")

然后我计划让UpdateQuery, SelectQuery, DeleteQuery, 和CountQuery所有扩展SelectiveQuery。当我试图弄清楚如何创建InsertQuery类时,我的困境就出现了。我希望它扩展 Query 但不扩展SelectiveQuery

最重要的是,InsertQuery它将UpdateQuery共享一些相同的方法,例如setValue("aColumn","aValue"). 我宁愿只维护这些方法UpdateQuery并且InsertQuery在一个位置有共同点。我该如何解决这个问题?如果我在PHP. 我想我会使用 Traits 来做到这一点。

在此处输入图像描述

4

2 回答 2

1

如果 InsertQuery 和 UpdateQuery 有共同的行为,你不能只创建一个包含共同内容的抽象类并让 InsertQuery 和 UpdateQuery 扩展它吗?抽象类将扩展 SelectiveQuery,因此 InsertQuery 和 UpdateQuery 也将继承所有其他行为。

但是......也许你可以看看像 Hibernate 这样的 ORM 框架。无需重新发明轮子等。

于 2013-06-15T17:37:33.880 回答
1

你可以用mixin代替继承,即引入另一个类,如Columns,InsertQuery和SelectiveQuery将类作为成员,所以语法是insertQuery.columns().setValue("aColumn", "aValue"). 另外,请看这里:querydsl

于 2013-06-15T17:44:47.453 回答