Вот ситуация .... ...
У меня есть 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, который позволяет мне получать связанные элементы БД, например:
class getReleatedPurchaseRecordDBCmd{
public _constructor($aCustomerObject){
}
//.... ....
}
Но в этом "решении" у меня возникли некоторые проблемы: я теряю отношения с объектом-клиентом ... да, я могу прочитать все записи, получить объект-клиент в принципе, ничего не зная о запись покупки ....
Некоторые могут попросить меня сделать что-то вроде этого:
class customer{
//skip other methods...
public getPurchaseRecords(){
//query the db
}
}
Это работает, но я не хочу, чтобы у структуры объекта были какие-то сильные отношения между БД ... Вот почему я придумываю материал DBCmd ...
Итак, все кажется очень взаимосвязанным, как это можно решить? Спасибо.