这是情况............我有一个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
但是当我得到一些与其他表相关的对象时,就会出现问题,例如......一个客户有一个购买记录,而哪个购买记录有很多项目......
那么,我在 read 方法中做了什么?我应该阅读与客户相关的所有记录吗?我是否也需要循环购买记录中的所有项目?如果是的话,当我读客户时,我需要查询 3 个表,但有些可能不需要查看......它浪费了资源......
我想出了另一个解决方案,我制作了一组新的 DBCmd,它允许我获取相关的数据库项目,例如:
class getReleatedPurchaseRecordDBCmd{
public _constructor($aCustomerObject){
}
//.... ....
}
但是在这个“解决方案”中,我遇到了一些问题,是我失去了对象客户中的关系......是的,我可以读回所有记录,获取客户对象基本上对购买记录一无所知。 ...
有些人可能会要求我做这样的事情:
class customer{
//skip other methods...
public getPurchaseRecords(){
//query the db
}
}
它可以工作,但我不希望对象结构与 db 之间有某种紧密的关系......这就是为什么我想出 DBCmd 的东西......
那么,一切似乎都很耦合,怎么解决呢?谢谢你。