私はこれまで多くのデータベース(MySQL)Webアプリを書いてきましたが、私の構造はちょっと不器用だといつも思っています。ここでいくつかのアドバイスを期待して、使用しているプログラミング/設計パターンを改善したいと思います。特に、データベース(スキーマ)の実装をカプセル化するOOPアプローチを補完する構造を見つけることができません。私
私の質問は例で最もよく説明できると思います。Invoiceオブジェクト/クラスがあると言う2つのアプローチがあります。
最初は静的メンバー関数を使用することです
class Invoice
{
int id;
string ref;
int customer_id;
date created;
date due;
static id create();
static bool update(id, field1, field2, ...);
static bool delete(id);
static bool get(id);
};
2番目のアプローチは、すべてのものをデータベースオブジェクトに入れることです。
class Database extends ProprietaryDBConnecter, Singleton
{
id createInvoice();
bool updateInvoice(id, field1, field2, ...);
bool deleteInvoice(id);
bool getInvoice(id);
id createCustomer();
bool updateCustomer(id, field1, field2, ...);
bool deleteCustomer(id);
bool getCustomer(id);
// etc...
}
(SQL)メンバー関数はどちらの方法でも「ビュー」から非常に切り離せないことがわかります。「ビュー」はクラスに必要なものを決定するため、ドキュメント/ビューアーキテクチャを壊すようです。
また、たとえばSELECTステートメントは必要なものだけを選択する必要があるため、一種の非効率的と思われますが、Invoiceのメンバー変数の存在は「データの保証」を意味するようです。
質問を明確に説明したかどうかわからない、このアーキテクチャ/デザインパターン/ what-it-is-known-asへの他のベストアプローチは何ですか?
アドバイスをありがとう