È meglio creare classi del Modello, con un bastone o con un generico database utilità di classe?

StackOverflow https://stackoverflow.com/questions/2778

Domanda

Abbiamo un programma di utilità semplice di classe in casa per le nostre chiamate al database (una luce wrapper ADO.NET), ma sto pensando di creazione di classi per ogni oggetto di database.Sarebbe una cosa intelligente da fare così, o sarebbe solo un beneficio se si utilizza l'intero framework MVC per ASP.NET?

Quindi abbiamo questo:

SQLWrapper.GetRecordset(connstr-alias, sql-statement, parameters);
SQLWrapper.GetDataset(connstr-alias, sql-statement, parameters);
SQLWrapper.Execute(connstr-alias, sql-statement, parameters);

Pensando di fare questo:

Person p = Person.get(id);
p.fname = "jon";
p.lname = "smith";
p.Save();

o per un nuovo record

Person p = new Person();
p.fname = "Jon";
p.lname = "Smith";
p.Save();
p.Delete();

Questo sarebbe intelligente, o sarebbe eccessivo?Posso vedere il beneficio per il riutilizzo, la modifica del database, e la manutenzione e la leggibilità.

È stato utile?

Soluzione

Questa domanda è caricato data-driven design vs domain driven design.Per qualsiasi applicazione che ha una buona quantità di comportamento, quindi domain driven design dovrebbe essere preferito.La segnalazione o il programma di utilità di applicazioni tendono a lavorare meglio (o sono più veloci da sviluppare) con i dati driven design.

Quello che stai chiedendo è "la mia azienda a fare un cambiamento fondamentale nel modo in cui progettiamo il nostro codice".Come un dominio-freak, la mia reazione istintiva è da urlo .Tuttavia, la semplice natura della tua domanda, io non sono sicuro di comprendere appieno la portata del cambiamento che si sta proponendo.Penso che si dovrebbe parlare di più per la tua squadra su di esso.

Ottenere alcune letteratura, come Evan DDD libro, o il gratuito fondazioni ebook, e quindi sarete in una posizione migliore per giudicare in quale direzione si dovrebbe andare.

Altri suggerimenti

Non è MVC l'unico modello di progettazione per il web, ma è un utile uno.

Adozione solo la 'M' di pagare i dividendi, a mio parere, anche se non si può/non adottare la 'V' o 'C'.

L'approccio è discutere, è considerato un bene da molti folk, me compreso!L'apprendimento di questo approccio richiederà un certo sforzo, ma non lasciatevi scoraggiare!

Che dire solo cercando una piccolo progetto con LINQ to SQL?Forse trovare un bel progetto di riferimento su codice di google, e lo studio di come gli altri hanno lavorato con lui.

È uno strumento semplice e vi permetterà di familiarizzare con alcuni dei problemi che si presentano con la mappatura di oggetti di database.

Si sarà quindi in grado di ottenere un tatto per esso, e decidere se vale la pena la curva di apprendimento.

Ci saranno nuovi concetti di cogliere e sperimentare con cose come:

  • Unità di Lavoro:Quando si esegue Salvare e Cancellare ecc, un ORM tende a non farlo immediatamente, mentre un recordset basato DAL sarà.Questo può essere sorprendente, quindi avrete bisogno di imparare un po ' su questo.Leggere su Modello di unità di Lavoro per avere una comprensione di questo.
  • Le Operazioni Di Massa sono un problema O/M.Un lettore di dati in modo efficiente può scorrere migliaia di righe, ma con un ORM è necessario prestare attenzione quando si lavora con grandi lotti di oggetti.Ancora una volta, di leggere su.
  • Associazioni sembra grande quando è possibile fare cose come questa customer.Orders.Count ma sono anche la causa di molti problemi.Avrete bisogno di trovare alcune delle norme di sicurezza da seguire quando si lavora con le associazioni.

...per citarne alcuni.

Per cominciare, non preoccuparti di eredità e roba del genere, solo semplice e semplice entità che la mappa di tabelle.

Provare a utilizzare la stessa che si potrebbe utilizzare il vostro esistente DAL.Poi iniziare a sperimentare con le associazioni.

Allora, forse, provare a mettere più il comportamento nelle entità.Se si comincia a piacerti questo, e sentire che avete bisogno di più funzioni, in considerazione di provare un più ricco di funzionalità come ORM Lightspeed o NHibernate.

Spero che questo aiuta!

A me sembra che si sta cercando di fare quello che LINQ può già fare per voi.Se si sono bloccati in un vecchio quadro in cui si può, potrei suggerire che si utilizza Subconic (http://subsonicproject.com/), invece di dover creare manualmente tutti questi oggetti a mano.

Avevo un progetto in cui ero in una condizione simile e cambiato subsonico a metà con risultati fantastici.Di sviluppo più rapidi e più facili da leggere/usare il codice.

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