Best practice: modelli di programmazione dell'app database

10

Ho scritto molte applicazioni web di database (MySQL) finora, ma penso sempre che la mia struttura sia piuttosto goffa. Voglio migliorare il modello di programmazione / progettazione che uso, sperando in qualche consiglio qui. In particolare, non riesco a trovare una struttura che integri un approccio OOP che incapsula l'implementazione del database (schema). Io

Pensa che la mia domanda possa essere meglio spiegata con l'esempio. Ci sono 2 approcci che uso ora dire che ho un oggetto / classe Invoice:

per prima cosa usa le funzioni membro statiche

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);
};

Il secondo approccio consiste nel mettere ogni cosa in un oggetto di database:

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...
}

Trovo che in entrambi i casi le funzioni dei membri (SQL) siano molto inseparabili dalla "vista", in quanto la "vista" determina ciò che le classi devono avere e quindi sembra interrompere l'architettura del documento / vista. p>

Inoltre, sembra un po 'inefficiente, per esempio un'istruzione SELECT dovrebbe selezionare solo ciò che è necessario, ma la presenza di variabili membro in Fattura sembra implicare "dati garantiti".

Non so se ho spiegato chiaramente la domanda, quali sono alcuni altri migliori approcci a questa architettura / design pattern / what-it-is-known-as?

Grazie per i consigli

    
posta Jake 07.12.2010 - 19:59
fonte

3 risposte

13

Suppongo che tu possa usare un ORM.

Ma in realtà, il design del database NON dovrebbe seguire i principi OOP, dovrebbe seguire i principi di progettazione del database come la normalizzazione. E dovrebbe essere progettato nel database non nell'applicazione. E le regole di integrità dei dati dovrebbero essere applicate a livello di database non dall'applicazione.

Suggerirei di leggere alcuni libri di progettazione di database e, quindi, di approfondire le prestazioni sul database di tua scelta.

    
risposta data 07.12.2010 - 20:27
fonte
9

I cannot find a structure that complements an OOP approach that encapsulates the implementation of the database

Sembra che tu stia descrivendo la mancata corrispondenza relazionale all'oggetto .

Ci sono un numero di cose che dovrebbero risolvere questo OODBMS, strumenti ORM, un host di accesso ai dati strumenti.

Penso che ci siano così tante soluzioni che mi portano a credere che One True Solution ™ non esista.

Quindi puoi scegliere qualsiasi direzione che ti piace sicura sapendo che alcune persone la odieranno e alcune le adoreranno.

    
risposta data 07.12.2010 - 20:52
fonte
2

Se non si desidera utilizzare un wrapper ORM, utilizzare un database che supporti lo storage in stile OOP come MongoDB .

MongoDB (from "hu​mongo​us") is a cross-platform document-oriented database system. Classified as a "NoSQL" database, MongoDB eschews the traditional table-based relational database structure in favor of JSON-like documents with dynamic schemas (MongoDB calls the format BSON), making the integration of data in certain types of applications easier and faster...

    
risposta data 07.12.2010 - 21:16
fonte

Leggi altre domande sui tag