我正在尝试创建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来做这件事。
答案 0 :(得分:1)
你可以用mixin替换继承,即引入另一个类,如Columns,InsertQuery和SelectiveQuery将该类作为成员,因此语法将为insertQuery.columns().setValue("aColumn", "aValue")
。另外,请看一下:querydsl。
答案 1 :(得分:0)
如果InsertQuery和UpdateQuery有共同的行为,你不能只创建一个包含常见内容的抽象类,并让InsertQuery和UpdateQuery扩展它吗?抽象类将扩展SelectiveQuery,因此InsertQuery和UpdateQuery也将继承所有其他行为。
但是......也许你可以看一下像Hibernate这样的ORM框架。无需重新发明轮子等。