我正在使用php创建自己的查询生成器,它也可以执行查询并从数据库中获取结果。起初我在一个类中有这个功能,但是在考虑之后我相信 QueryBuilder 和 DBProcessor 应该是两个独立的类。
class QueryBuilder {
var $query;
...
function select()
function from()
function join()
function where()
...
}
class DbProcessor {
...
function execute()
function rowCount()
function startTransaction()
function lastInsertId()
...
}
我遇到的问题是在尝试坚持其他良好的编程约定的同时使用这些。(松散耦合)
我应该在 QueryBuilder 中创建一个构造,以便在创建时传入 DbProcessor 的实例吗?然而,这个想法似乎走下坡路,因为我最终会在 QueryBuilder 中复制方法名称,只是为了调用 DbProcessor 中的方法,如下所示
class QueryBuilder {
var $DbProcessor;
function select()
...
function rowCount()
{
$this->DbProcessor->rowCount()
}
function startTransaction()
{
$this->DbProcessor->startTransaction()
}
}
这种方式似乎只是添加了重复的方法名称,并且将 DbProcessor 放在 QueryBuilder 中似乎更好。
我怎样才能实现我想要的目标?
答案 0 :(得分:0)
我在个人项目中做过类似的事情。在我的例子中,您的QueryBuilder
仅负责构建返回String var的sql语句。没有执行。只构造一个纯字符串SQL。另一方面,database
有一个方法来执行作为参数传递的SQL语句。然后,为了编排整个查询执行,我有其他类xxxRepository.java
,其中我将拥有getXXXById()
类型的所有实体方法。这会调用QueryBuilder.java
返回我要执行的SQL,然后将其传递给Database.java execute()
方法以获得结果。