这是情况....... 我有一个DBManager,它实现了DBInterface,在DBInterface中,我得到了4个方法:
-create(DBCmd);
-read(DBCmd);
-update(DBCmd);
-delete(DBCmd);
DBCmd对象负责生成SQL语句,而DBCmd需要sql语句中的对象:
class DBCmd{
public _constructor($aObj){
}
public executeCreate(){
}
public executeRead(){
}
public executeUpdate(){
}
public executeDelete(){
}
}
流程将是这样的:
aObject ---> put it into DBCmd ----> put the DBCmd in DBManager ---> execute
但是当我得到一些与其他表相关的对象时会出现问题,例如......客户有购买记录,哪个购买记录有很多项......
那么,我在读取方法中该怎么办?我应该阅读与客户相关的所有记录吗?我是否还需要循环购买记录中的所有项目? 如果是,当我做读客户时,我需要查询3个表,但有些可能不需要查看.....它会浪费资源......
我想出了另一个解决方案,我创建了一组新的DBCmd,允许我获取相关的DB项目,例如:
class getReleatedPurchaseRecordDBCmd{
public _constructor($aCustomerObject){
}
//.... ....
}
但是在这个“解决方案”中,我遇到了一些问题,是我在对象客户中丢失了关系...是的,我可以读回所有记录,得到客户对象基本上不知道任何关于购买记录....
有些人可能会让我做这样的事情:
class customer{
//skip other methods...
public getPurchaseRecords(){
//query the db
}
}
它有效,但我不希望对象结构在db之间有一些很强的关系....这就是为什么我想出DBCmd的东西......
所以,一切似乎都很耦合,怎么能解决呢?谢谢。答案 0 :(得分:0)
对于这样的东西,我倾向于获得子对象的计数,初始查询通常涉及sql COUNT和JOIN,然后有一个单独的getSubObjects命令,可以在以后需要时调用。例如:
$datamodel->getCustomer($id);//or some such method
返回
class Customer{
$id = 4;
$recordCount = 5;
$records = null;
}
然后我可以根据需要使用count来显示任何显示内容,如果我需要记录填充调用:
$customer->records = $datamodel->getCustomerRecords($customer->id);