Quindi ho creato un livello di accesso ai dati tramite TDD e ho affrontato un po 'di preoccupazione. Preferirei non iniziare sulla strada sbagliata, quindi ho pensato di chiedere a voi ragazzi di vedere se i miei pensieri erano in linea con un'architettura pulita.
I metodi all'interno del mio livello di accesso ai dati (in breve DAL) sono piuttosto semplici. Sono in linea con le procedure memorizzate nel database (nessun altro modo per richiamarlo per mantenere le cose pulite) e contengono gli stessi parametri delle procedure. Si connettono quindi al database e restituiscono il risultato della query. Ecco un esempio:
public int DeleteRecord(int recordId)
{
recordId.RequireThat("recordId").NotZeroOrLess();
List<SqlParameter> parameters = new List<SqlParameter>();
parameters.Add(new SqlParameter { ParameterName = "@RecordId", SqlDbType = SqlDbType.Int, Direction = ParameterDirection.Input, Value = recordId});
return this.ExecuteNonQuery("DeleteRecord", parameters.ToArray());
}
Questo funziona perfettamente per questo tipo di metodo perché non sto facendo nulla di significativo con il set di risultati. Voglio solo assicurarmi che il comando abbia funzionato, quindi restituirò il risultato della non query, che è solo le righe interessate, e posso verificare la logica usando quel numero.
Tuttavia, diciamo in un altro metodo DAL, voglio caricare un record. La mia procedura di caricamento verrà eseguita selects
su un gruppo di tabelle e restituirà un DataSet
, ma sto combattendo con il fatto che il mio DAL debba creare gli oggetti business all'interno del metodo usando il DataSet
, o se i miei oggetti business stessi dovrebbero avere solo un Load()
metodo che ottiene il DataSet
dal DAL, e quindi sostanzialmente si riempie.
Farlo attraverso il DAL comporterebbe meno logica negli Business Objects (anche se questa è solo una logica selezionata, è comunque logica), ma affollerebbe un po 'il DAL e lo farebbe sentire come se stesse davvero facendo qualcosa che non dovrebbe sto facendo.
Che cosa ne pensate?