ここに状況があります.... ... DBInterface に DBInterface を実装する DBManager があり、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のものを考え出しました...
では、すべてが非常にカップリングしているように見えますが、どうすれば解決できますか? ありがとうございました。