Dans le contexte de l'application n-tier, existe-t-il une différence entre ce que vous considérez comme vos classes d'accès aux données et vos référentiels?Repository vs Data Access
J'ai tendance à penser oui mais je voulais juste voir quelle autre pensée. Je pense que le travail du référentiel consiste simplement à contenir et exécuter la requête brute elle-même, où la classe d'accès aux données créerait le contexte, exécuter le référentiel (passer dans le contexte), gérer le mappage du modèle de données au modèle de domaine et retournez le résultat ...
Qu'en pensez-vous? Également, voyez-vous cela changer dans un scénario Linq to XML (en supposant que vous changiez le contexte pour le XDocument concerné)?
Vive Anthony
MISE À JOUR:
Ceci est la façon dont je l'aurais généralement mis en œuvre des choses auparavant:
public class TermBl : ITermBl
{
public IEnumerable<ITerm> GetAll(IListParameter criteria)
{
//Any pre business logic
var dataLayer = this.CreateDataLayer();
var result = dataLayer.GetAll(criteria);
//Any post business logic
return result;
}
... Other methods
}
public class TermDa : ITermDa
{
public IEnumerable<ITerm> GetAll(IListParameter criteria)
{
//Linq query
var dataResult = ....ToList()
var mappedResult = this.FromDataToDomain(dataResult);
//Note the mapping isn't done in this object, the actual
// mapping is handled by a separate component
return mappedResult;
}
... Other methods
}
Voyez-vous des problèmes inhérents ici avec le modèle en général .. En ce qui concerne le dépôt où j'ai pensé à utiliser le, il est au lieu d'avoir la requête directement dans le GetAll de TermDa.
méthode que je changerais à ressembler à quelque chose plus comme ceci:
public class TermDa : ITermDa
{
public IEnumerable<ITerm> GetAll(IListParameter criteria)
{
var repository = this.CreateRepository();
var dataResult = repository.GetAll(..., criteria).ToList();
var mappedResult = this.FromDataToDomain(dataResult);
return mappedResult;
}
... Other methods
}
public class TermRepository : ITermRepository
{
public IQueryable<ITerm> GetAll(IMyContext context, IListParameter criteria)
{
//Linq query
return ...;
}
... Other queries
}
Est-ce que vous les gars comment voir travailler ou pas vraiment ... Avec ou sans le dépôt que je vois soit de ce qui précède la protection totale de la couche d'affaires de connaître tout ce qui concerne les méthodes d'accès aux données/la technologie utilisée ...
Alors voyez-vous un objet DAL utilisant un objet de référentiel? c'est-à-dire quand vous dites émettre des requêtes, je pense qu'il le ferait en appelant le référentiel ... presque comme le référentiel est un proxy pour procs stockés dans une base de données, sauf que les requêtes sont dans le référentiel ... –
@vdh_ant: Non , une DAL n'a généralement aucune connaissance du modèle de domaine. L'implémentation d'un dépôt (pas son interface/type de base) pourrait utiliser le DAL, bien que la plupart des nouveaux projets n'aient même pas de DAL, tout est encapsulé dans un ORM.Le référentiel n'est pas ** un proxy aux objets de la base de données, vous avez mal compris de quoi il s'agit. – Aaronaught
@Aaronaught: mettre le référentiel de côté pendant une seconde, quand vous dites "DAL n'a généralement aucune connaissance du modèle de domaine" cela va à l'encontre de ce que j'ai vu autour de moi ... penser d'un point de vue interface/contrat le DAL doit retourner quelque chose et j'ai principalement vu que quelque chose devait être le modèle du domaine. Quand je pense à quoi d'autre cela pourrait être, ce ne pourrait être que les modèles de données ... J'aurais pensé que c'était mauvais pour plusieurs raisons. Principalement parce que votre couche logique métier est maintenant couplée à un modèle de données spécifique à différentes technologies ... –