Vous pouvez utiliser des référentiels en utilisant chaque technologie d'accès aux données. Un référentiel est une abstraction par rapport aux assistants/services d'accès aux données existants, permettant le découplage de la logique métier de la couche d'accès aux données. Référentiels utilisés avec Query pour activer le filtrage. Il est souvent utilisé avec unité de travail pour stocker les modifications dans la base de données.
Un dépôt comporte au moins:
- Get-objet par clé opération (s)
- Get-all-Objets
- Get-premier-objet par requête opération (s)
- opération par requête Get-objets (s)
Un exemple très simple :):
A. Produit classe, défini dans commun:
public class Product
{
public int Id { get; private set; }
public string Code { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
}
B. Classes pour Recherche, IRepository et IUnitOfWork sont définis dans DAL.interfaces.dll ou commun .dll (mais PAS dans DAL!).
public class Query
{
public string Text { get; set; }
}
public interface IRepository<TEntity>
where TEntity : class
{
bool TryGet(int key, out TEntity value);
TEntity this[int key] { get; }
IEnumerable<TEntity> GetAll();
bool TryGetFirst(Query condition, out TEntity value);
TEntity GetFirst(Query condition);
IEnumerable<TEntity> GetAll(Query condition);
int Count { get; }
}
public interface IUnitOfWork
{
void SetAdded(TEntity value); // Marks entity as added for further INSERT
void SetRemoved(TEntity value); // Marks entity as removed for further DELETE
void SetChanged(TEntity value); // Marks entity as modified for further UPDATE
void Save(); // Save all the changes
}
IUnitOfWork est au courant des entités modifiées.Save() appelle une méthode CRUD DatabaseHelper/OdbcHelper appropriée pour chaque entité modifiée afin de conserver les modifications dans la base de données.
La mise en œuvre de IRepository <Produit> ... IRepository <EntityXY> et IUnitOFWork doit être placé dans DAL. Le BLL utilise ensuite IRepository et IUnitOFWork afin de mettre en œuvre la logique métier (domaine). Le BLL lui-même pourrait être organisé comme couche de service sur le dessus de domaine modèle, mais il est hors de la portée de la discussion :).
J'espère que ma réponse sera utile.
S'il vous plaît ne hésitez pas à me poser une question ...
Liens: Patterns of enterpise application architecture by Martin Fowler
Nous utilisons des entités/objets dans les M (modèles) quand nous voulons les exposer à une vue. Sinon, nous les avons maintenant placés dans une bibliothèque de classes Domain séparée. Mais comment utiliser le design du dépôt? Et où mettre les appels de base de données (génériques et spécifiques à la base de données)? Peut-être que c'est juste une chose à nommer, mais toutes les pensées sont les bienvenues! – jpderooy
Un référentiel n'est rien de plus qu'un tour différent sur vos classes DAL qui utilisent la technologie de base de données que vous utilisez. Je ne veux pas entrer dans les détails de la façon dont le référentiel est différent de vos classes DAL, c'est une requête google facile à faire. Cependant, en essence, ils servent à des fins similaires. Sinon, vous créeriez toujours une instance de votre classe BLL dans votre contrôleur, ce qui créerait une instance du référentiel, renvoyant éventuellement l'entité jusqu'à l'utiliser comme M dans MVC. – e36M3
Salut, cela a du sens. Je pense que la différence ou la similarité DAL du dépôt <> n'est pas claire (même à travers une recherche google). Pouvez-vous me donner plus d'informations sur la configuration? Entités, Business Logic et un référentiel qui communique avec la base de données? Où - dans une structure et un nom de dossier logique - devons-nous mettre les opérations spécifiques à la base de données comme db.run() par exemple? Merci! – jpderooy