Ich habe bisher viele Datenbank-Web-Apps (MySQL) geschrieben, aber ich denke immer, dass meine Struktur etwas ungeschickt ist. Ich möchte das von mir verwendete Programmier- / Entwurfsmuster verbessern und hoffe auf einige Ratschläge hier. Insbesondere kann ich keine Struktur finden, die einen OOP-Ansatz ergänzt, der die Implementierung der Datenbank (Schema) kapselt. ich
Ich denke, meine Frage lässt sich am besten anhand eines Beispiels erklären. Es gibt zwei Ansätze, die ich jetzt verwende: Ich habe ein Rechnungsobjekt / eine Rechnungsklasse:
Zunächst müssen statische Elementfunktionen verwendet werden
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);
};
Der zweite Ansatz besteht darin, alles in ein Datenbankobjekt einzufügen:
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...
}
Ich finde, dass die (SQL) -Mitgliedsfunktionen in beiden Richtungen sehr untrennbar mit der "Ansicht" verbunden sind, da die "Ansicht" bestimmt, was die Klassen haben müssen, und daher die Dokument- / Ansichtsarchitektur zu brechen scheint.
Es scheint auch ineffizient zu sein, zum Beispiel sollte eine SELECT-Anweisung nur auswählen, was benötigt wird, aber das Vorhandensein von Mitgliedsvariablen in der Rechnung scheint "garantierte Daten" zu implizieren.
Ich weiß nicht, ob ich die Frage klar erklärt habe: Was sind einige andere beste Ansätze für dieses Architektur- / Entwurfsmuster / was-es-bekannt-ist?
Danke für Ratschläge
Scheint, als würden Sie die objektrelationale Impedanzfehlanpassung beschreiben .
Es gibt eine Reihe von Dingen, die dieses OODBMS lösen sollen, ORM-Tools, eine Vielzahl von Datenzugriffstools.
Ich denke, die Tatsache, dass es so viele Lösungen gibt, lässt mich glauben, dass One True Solution ™ nicht existiert.
So können Sie jede Richtung wählen, die Sie mögen, sicher in dem Wissen, dass einige Leute es hassen und andere es lieben werden.
quelle
Wenn Sie keinen ORM-Wrapper verwenden möchten, verwenden Sie eine Datenbank, die Speicher im OOP-Stil wie MongoDB unterstützt .
quelle