Php 应用SRP会导致问题。如何?
我正在使用php创建自己的查询生成器,它还可以执行查询并从数据库中获取结果。起初,我在一个类中拥有这个功能,但是仔细考虑之后,我认为QueryBuilder和DBProcessor应该是两个独立的类Php 应用SRP会导致问题。如何?,php,single-responsibility-principle,Php,Single Responsibility Principle,我正在使用php创建自己的查询生成器,它还可以执行查询并从数据库中获取结果。起初,我在一个类中拥有这个功能,但是仔细考虑之后,我认为QueryBuilder和DBProcessor应该是两个独立的类 class QueryBuilder { var $query; ... function select() function from() function join() function where() ... } class DbP
class QueryBuilder {
var $query;
...
function select()
function from()
function join()
function where()
...
}
class DbProcessor {
...
function execute()
function rowCount()
function startTransaction()
function lastInsertId()
...
}
我遇到的问题是,在一起使用thse的同时,还要坚持其他良好的编程约定。(松耦合)
我是否应该在QueryBuilder中创建一个构造,以便在创建时必须传入DbProcessor的实例?然而,这个想法似乎走下坡路了,因为我最终会在QueryBuilder中复制方法名,只是为了调用DbProcessor中的方法,就像下面这样
class QueryBuilder {
var $DbProcessor;
function select()
...
function rowCount()
{
$this->DbProcessor->rowCount()
}
function startTransaction()
{
$this->DbProcessor->startTransaction()
}
}
这种方式似乎只是添加了重复的方法名,并使得只将DbProcessor放在QueryBuilder中似乎更好
我怎样才能在这里实现我想要的呢?我在一个个人项目中也做过类似的事情。在我的例子中,您的
QueryBuilder
,只负责生成返回字符串变量的sql语句,不执行任何操作。只有一个纯字符串SQL。另一方面,数据库
有一个方法来执行作为参数传递的SQL语句。然后,为了协调整个查询执行,我有另一个类,xxxRepository.java
,其中我将有getXXXById()
类型的所有实体方法。这将调用QueryBuilder.java
返回我想要执行的SQL,然后将其传递给Database.java execute()
方法以获得结果