Domanda

vorrei sapere il vostro parere sull'utilizzo di componenti data-aware in progetti. Quali sono la 'forza' e punti 'deboli' di sviluppo di applicazioni (win32 e web), utilizzando Delphi e componenti data-aware (da Delphi della suite standard o di terze parti)?

Utilizzando FireBird Ho lavorato molto con IBObjects, che sono una suite maturo di componenti e ha lavorato molto bene.

Ma ci sono anche un sacco di altri RDBMS (MySQL, MSSQL, DB2, Oracle, SQLite, Nexus, Paradox, Interbase, Firebird, ecc). Se avete sviluppato grandi progetti, alla quale è stato utilizzato un sacco di componenti data-aware si prega di rispondere con il tipo di database e dei dati in grado di riconoscere i componenti nome privato.

Sono anche interessato su DB2 (AS400). Quali componenti avete usato con successo, o quali componenti sono davvero un dolore con cui lavorare?

È stato utile?

Soluzione

ho trovato che utilizzando i dati-aware componenti risultati in un'applicazione senza una chiara distinzione tra le imprese e la logica dell'interfaccia utente.

Questo va bene per piccoli progetti, ma man mano che crescono più grande il codice diventa sempre meno gestibile.

Tutti i vari pezzi di codice di evento (e le loro interazioni) può diventare un vero e proprio incubo per capire!

di riconoscere i dati componenti e sono passati a un design MVC (codificato a mano) Invariabilmente in questi casi che ho piantato in asso.

Questo richiede un sacco di up-front di codifica sforzo, ma i risultati (secondo me) in un progetto che è gestibile, estensibile e debuggable.

Altri suggerimenti

Dopo aver provato sia lo stile data-aware e non data-aware di applicazioni Delphi sono tornato in campo componente dati-aware in questi giorni. Ci vuole un po 'di lavoro e la disciplina per correttamente sovrapporre il codice, ma è ancora più veloce di fare tutto a mano utilizzando i controlli non data-aware.

Alcuni dei miei suggerimenti per l'utilizzo dei componenti in grado di riconoscere i dati sono

  • Non basta riscrivere FishFact su scala più ampia. Metti un po 'di pensiero nel vostro disegno.

  • Non utilizzare un TDataModule, utilizzare molti TDataModules ciascuno responsabile di solo un piccolo aspetto dei vostri dati delle applicazioni.

  • TDatasets appartengono a TDataModules, mentre TDataSources appartengono a TForms (a meno che usato per master / dettaglio rapporti).

  • Utilizzare i set di dati in memoria, come il DataSnap TClientDataSet.

  • I tuoi ClientDataSets non c'è bisogno di rispecchiare esattamente le tabelle del database. DataSnap permette di massaggiare il vostro strutture di dati in memoria in modo da poter produrre set di dati su misura per scopi specifici. In particolare si possono fare cose come

    • Unire due o più tabelle in quello modificabili set di dati

    • denormalizing strutture dettaglio tabella master, in grado di semplificare il codice utente a volte.

    • Create in memoria solo i campi (come i campi calcolati, ma si può scrivere anche a loro)

  • TClientDataSet tabelle nidificate sono utili, ma non è l'unico modo per esprimere maestro dettaglio le relazioni. A volte è meglio farlo alla vecchia maniera con due TClientDataSets indipendenti uniti attraverso un TDataSource.

Date un'occhiata alle soluzioni ORM.

E 'un approccio bella con l'architettura multi-tier. Vedere per Delphi Win32

Dati controlli consapevole sono grandi, ma è necessario essere sicuri di ottenere il codice di attività in uno strato separato.

Non è difficile, ma è necessario essere consapevoli di come si può fare.

Un approccio è quello di avere i componenti DataSet in un DataModule (o altro contenitore non visiva).

Un altro trucco utile è quello di utilizzare un TClientDataSet per fare l'ingresso interfaccia utente, e l'uso che, come un buffer intermedio tra l'interfaccia utente e lo strato di business. Il livello di business utilizza quindi TDataSet componenti specifici per la parte dati.

- Jeroen

data-aware di Delphi componenti non sono dipendeva il motore di database back-end che si sta utilizzando, in modo da utilizzare Firebird o MS SQL Server o Oracle o di altri non importa ai componenti data-aware. Loro conoscono solo la componente di origine dati loro assegnato e fanno tutto loro roba correlata DB tramite questo.

Per quanto mi riguarda, se qualcosa può essere fatto con componenti data-aware in un bel modo, io li uso. Si tratta in genere di piccoli progetti che dovrebbe essere fatto in un breve tempo. Nei progetti più grandi, potrei totalmente escludere componenti data-aware o utilizzarli in forme che sono semplicemente utilizzati per la presentazione dei dati e non ricevono l'input dell'utente. Quando si tratta di ricevere input dell'utente, posso usare componenti non riconoscere i dati perché ho più flessibilità nel loro controllo e convalidare l'input. Naturalmente i componenti dei dati-ware può ancora essere utile in tali scenari troppo. È ancora possibile convalidare l'input dell'utente nel set di dati eventi come OnBeforePost. Anche se si utilizza un design multi-tier, e il vostro client App indica di strato presentatore dei dati, la vostra convalida dell'input è fatto nel livello intermedio in modo da poter ricevere l'input usando componenti data-aware in app client e inviarli al di livello intermedio per la convalida e il successivo trattamento.

componenti data-aware sono usful da un RAD e la prospettiva di prototipazione, soprattutto quando si è di report Progettazione o griglie che sono basati su dati. vale a dire che si può sperimentare in fase di progettazione. Così li uso come quella. Ma quando arriva il momento di trasformarlo in codice di spedizione, ho quasi sempre sever i collegamenti, rimuovere la funzionalità di SQL dalle query, e fare tutto in codice. E 'molto più prevedibile e gestibile in quel modo, soprattutto in un ambiente multi-sviluppatore con il controllo di versione. Quando l'SQL è incorporato nella forma da qualche parte, è un grande dolore per cercare di capire dove lo SQL risiede in realtà. Ed è particolarmente male avere SQL in due luoghi, e poi di capire quale è in vigore.

È possibile utilizzare UniDAC che supporta molti server di database, tra cui Firebird (che io uso) e ha caratteristiche molto piacevoli.

Remobject SDK si avrà una piacevole combinazione di architettura n-tier e l'astrazione del database.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top