类似于Java中PHP特性的东西?

类似于Java中PHP特性的东西?,java,Java,我正在尝试创建SQLquery对象的层次结构。我的基类将命名为Query。它将有类似于Query.setTable(“tableName”)的方法 然后,我计划使用一个SelectiveQuery对象扩展查询对象。此对象将具有类似于SelectiveQuery.where(“aColumn”、“=”和“123”)的方法 然后我计划让UpdateQuery,SelectQuery,DeleteQuery,以及CountQuery都扩展selectalquery。当我试图弄清楚如何创建InsertQ

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

然后,我计划使用一个
SelectiveQuery
对象扩展查询对象。此对象将具有类似于
SelectiveQuery.where(“aColumn”、“=”和“123”)
的方法

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

关键是
InsertQuery
UpdateQuery
将共享一些相同的方法,例如
setValue(“aColumn”、“aValue”)
。我更愿意只在一个位置维护
UpdateQuery
InsertQuery
方法的共同点。我如何处理这个问题?如果我用
PHP
编程。我想我会用特质来做这件事


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


然而。。。也许您可以看看像Hibernate这样的ORM框架。无需重新发明轮子等。

您可以用mixin替换继承,即引入另一个类,如Columns,InsertQuery和SelectiveQuery将该类作为成员,因此语法将是
InsertQuery.Columns().setValue(“aColumn”,“aValue”)
。另外,请看这里:。

想到非RoR开发人员仍然需要做这样的事情,我非常难过…@bwheeler96这与问题有什么关系?这是一个设计问题。您应该更改图表:创建一个基本的
ReadQuery
WriteQuery
继承
Query
,并添加一个
标准
API,该API仅用于需要它的查询。不需要特性;)那么
标准
API将添加到查询中?不,它将是另一个API;您应该在构建查询之前将该条件添加到查询中。类似于
Query.newSelectQuery().onTable(表)。使用criteria(criteria).build()
我不希望InsertQuery扩展查询。像InsertQuery这样的方法是没有意义的。where(“aColumn”,“=”,“123”)好的,那么创建一个描述这两种方法通用的接口怎么样。Insert和Update将实现此接口。然后,您可以创建一个包含这些方法的实现的服务,并且Insert和Update可以委托给该服务。@David如果方法对某种类型的查询没有意义,就让它们什么都不做!顺便说一句,你应该看看建筑商pattern@fge方法什么都不做表明设计很差。@如果不同意,在某些情况下它非常有用,可以是这样的:ColumnsQuery扩展查询,UpdateQuery、InsertQuery扩展ColumnsQuery@jospratik当然不是,选择、计数和删除会有它,这没有道理。