Domanda

Supponiamo che stia sviluppando un'applicazione per un distributore di prodotti in C #.

Il distributore esegue i seguenti 3 tipi di transazioni:

(1) trattino

(2) Vendi

(3) Stock

Sto progettando le mie lezioni come segue:

public abstract class Transaction
{
}

public class Indent : Transaction
{
}

public class Sell : Transaction
{
}    

public class Stock : Transaction
{
}

Ora, se voglio salvare questi tre tipi di informazioni in tre tabelle separate, come dovrei progettare il mio livello DA?

Dovrei creare classi DA separate come

(1) IndentDA
(2) SellDA
(3) StockDA

o una singola classe TransactionDA ed eseguire operazioni CRUD verificandone i tipi utilizzando come / is operatori?

O cos'altro posso fare? Qualche suggerimento?

È stato utile?

Soluzione

In primo luogo, se hai creato una singola transazione TransactionDA e controllato i tipi all'interno della classe per eseguire operazioni CRUD, violeresti la Principio aperto / chiuso , quindi sicuramente non seguirei questa strada.

Per quanto riguarda i suggerimenti su come realizzare lo sviluppo del DAL, suggerirei di seguire alcuni post del blog su persone molto più intelligenti di me su ciò che pensano su questo argomento.

Il repository è il nuovo Singleton

Repository is Dead: Long Live Repository

Night of the Living Repositories

Credo che la conversazione continui, ma questo dovrebbe farti iniziare.

Altri suggerimenti

Userei un ORM come NHibernate e userei le sue capacità di ereditarietà multi-tavolo e quindi non dovrei preoccuparmene da solo.

Vorrei usare i sottotipi di entità qui. Crea una tabella per le transazioni (e come diceva un poster precedente, forse un termine diverso sarebbe meglio) e archivia tutto ciò che è comune lì dentro. Quindi crea uno " sottotipo " tabella per ogni specializzazione. Queste tabelle dei sottotipi devono avere la stessa chiave primaria della tabella principale (l'entità "strong") e i campi che sono unici per quella particolare specializzazione. Ogni sottotipo è correlato all'entità forte in un modo uno-a-uno, con partecipazione facoltativa alla fine del sottotipo e partecipazione richiesta alla fine dell'entità forte.

Quindi, per rendere più semplice l'interrogazione, definisci una vista che (esterna) unisce l'entità forte con tutti i sottotipi di entità in modo da poter facilmente " vedi " tutto.

Ecco un semplice (e comune) esempio di come configurarlo:

create table Employee (
  eid        int primary key,
  first_name text,
  last_name  text not null
)

create table Salaried (
  eid             int primary key,
  annualSalaryUSD money not null
)

create table Hourly (
  eid             int primary key,
  hourlyRateUSD   money not null
)  

Se sai che i tuoi dati stanno andando in tre tabelle separate, allora normalmente avrei tre classi DA separate.

Tuttavia, se le tue tabelle sono praticamente identiche, puoi generare TransactionDA e semplificare il tuo livello dati. Lo farei solo se sapessi che avrai un volume elevato di transazioni e che separerai i tuoi tavoli in file diversi o qualcosa del genere, altrimenti probabilmente semplificherei le cose e combinerei tutto.

Non tentare di creare un TransactionDA a meno che tutti i tipi di transazione separati non siano estremamente simili.

Puoi usare l'iniezione delle dipendenze, creare una classe DA per ognuna e farle implementare tutte la stessa interfaccia ITransactionDA con le tue operazioni CRUD.

public interface ITransactionDA
{
  void Read();
  void Update();
...
}

public class StockDA : ITransactionDA
{
  //implement interface methods
}

Stock stock = new Stock(new StockDA());

Farò qualcosa del genere

public abstract class DistributerTransaction
{
    DistributerDA dataaccess;
}
public class Indent : DistributerTransaction
{
}
public class Sell : DistributerTransaction
{
}
public class Stock : DistributerTransaction
{
}

public abstract class DistributerDA
{
   /*Read();
     Update();*/
}
public class IndentDA : DistributerDA
{
}
public class SellDA : DistributerDA
{
}
public class StockDA : DistributerDA
{
}

Dai un'occhiata alla Gang of 4 design pattern .

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