【发布时间】:2011-07-29 03:44:14
【问题描述】:
这里的情况...... 我有一个 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,它允许我获取相关的 DB 项,例如:
class getReleatedPurchaseRecordDBCmd{
public _constructor($aCustomerObject){
}
//.... ....
}
但是在这个“解决方案”中,我遇到了一些问题,是我失去了对象客户中的关系......是的,我可以读回所有记录,得到客户对象基本上不知道任何事情购买记录....
有些人可能会要求我做这样的事情:
class customer{
//skip other methods...
public getPurchaseRecords(){
//query the db
}
}
它可以工作,但我不希望对象结构与 db 之间有某种强关系......这就是我想出 DBCmd 东西的原因......
那么,一切似乎都很耦合,怎么解决呢?谢谢你。
【问题讨论】:
标签: php database oop object-oriented-analysis