Domanda

Scenario

Si dispone di un assieme per oggetti di trasferimento dati contenente 10 classi che rappresentano esattamente 10 tabelle nel database. Generare / creare un livello DAL che ha metodi come -

  DTOForTable1[] GetDataFromTable1();
  DTOForTable2[] GetDataFromTable2();

e così via ....

Domanda

Come si crea un metodo che nasconde i numerosi metodi per ottenere dati da ciascuna tabella dal codice client? Il metodo che vorrei ad esempio nel servizio o nel livello aziendale potrebbe apparire-

SomeGenericDTO[] GetDataFromTable(TableTypeEnum tableTypeEnum);
  1. Come posso farlo? È anche possibile?

  2. Se sì per (1), è una buona pratica?

  3. Se sì per (1) e (2) questo semplifica o complica la progettazione?

Grazie in anticipo.

È stato utile?

Soluzione

Potresti definirlo come:

T[] GetDataFromTable1<T>() where T:IDto
{
   // you can know the table with the type of T
}

Detto questo, preferirei avere diversi metodi o persino classi per lavorare con esso. Uso invece il modello di repository, suggerisco di cercare informazioni su di esso.

Altri suggerimenti

Ecco come lo fa il mio DAL:

List<entity> customers = SQL.Read(new SearchCriteria(), new Customers());

Per eseguire join:

List<entity> customers = SQL.Read(new SearchCriteria(), new Customers(new Orders(new OrderDetails())));

La stessa classe DTO determina a quale tabella accedere e le sue proprietà determinano quali colonne recuperare.

Non posso rispondere se è una buona o buona pratica. È la pratica che lavora da me da molto tempo. Non esistono metodi estranei come " GetById " ;, " GetAll " ;, ecc.

In questi giorni è molto comune implementare le classi di tabelle concrete come eredità di una classe di accesso alla tabella astratta. La classe astratta ha metodi generici per interrogare una tabella. Ogni classe concreta può dichiarare quale la corrispondente tabella di database (anche forse colonne e relazioni inter-tabella).

Modelli di progettazione che aiutano a includere ActiveRecord e Table Data Gateway .

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