Question

Supposons que je développe une application pour un distributeur de produits en C #.

Le distributeur effectue les 3 types de transaction suivants:

(1) retrait

(2) Vendre

(3) Actions

Je conçois mes cours comme suit:

public abstract class Transaction
{
}

public class Indent : Transaction
{
}

public class Sell : Transaction
{
}    

public class Stock : Transaction
{
}

Maintenant, si je veux enregistrer ces trois types d'informations dans trois tableaux distincts, comment dois-je concevoir ma couche DA?

Devrais-je créer des classes DA distinctes, comme

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

ou une seule classe TransactionDA et effectuez des opérations CRUD en vérifiant leurs types à l'aide d'opérateurs en tant que / est ?

Ou que puis-je faire d'autre? Des suggestions?

Était-ce utile?

La solution

Premièrement, si vous avez créé une classe unique, TransactionDA, et vérifié les types dans la classe pour effectuer des opérations CRUD, vous violeriez le Principe d'ouverture / fermeture , je ne voudrais donc absolument pas emprunter cette voie.

En ce qui concerne les suggestions sur la manière de construire votre DAL, je vous suggérerais de suivre quelques articles de blog sur des personnes beaucoup plus intelligentes que moi sur ce qu'ils pensent de ce sujet.

Le référentiel est le nouveau Singleton

Référentiel est mort: référentiel Long Live

Référentiels La nuit des vivants

La conversation se poursuit, je crois, mais cela devrait vous aider à démarrer.

Autres conseils

Je voudrais utiliser un ORM tel que NHibernate, utiliser ses capacités d'héritage multi-tables et ne pas avoir à m'en soucier moi-même.

Je voudrais utiliser les sous-types d'entité ici. Créez un tableau pour les transactions (et, comme l'a dit une affiche précédente, un terme différent serait peut-être mieux) et stockez tout ce qui y est commun. Créez ensuite un " sous-type " tableau pour chaque spécialisation. Ces tables de sous-types doivent avoir la même clé primaire que la table principale (l'entité "forte") et les champs propres à cette spécialisation particulière. Chaque sous-type est lié à l'entité forte de manière individuelle, avec une participation facultative sur l'extrémité du sous-type et une participation requise sur l'extrémité de l'entité forte.

Ensuite, pour faciliter l'interrogation, définissez une vue (externe) qui associe l'entité forte à tous ses sous-types d'entité afin que vous puissiez facilement "consulter". tout.

Voici un exemple simple (et courant) sur la façon de configurer ceci:

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
)  

Si vous savez que vos données sont classées dans trois tables distinctes, il me faudrait normalement trois classes DA distinctes.

Toutefois, si vos tables sont à peu près identiques, vous pouvez alors générer un générique TransactionDA et simplifier votre couche de données. Je ne le ferais que si vous saviez que le volume de vos transactions serait élevé et que vous diviseriez vos tables en différents fichiers ou quelque chose du genre, sinon je simplifierais probablement les choses et tout combinerais.

N'essayez pas de créer un compte TransactionDA à moins que tous vos types de transaction ne soient extrêmement similaires.

Vous pouvez utiliser l'injection de dépendance, créer une classe DA pour chacune d'elles et les faire implémenter avec la même interface ITransactionDA avec vos opérations CRUD.

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

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

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

Je vais faire quelque chose comme ça

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
{
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top