Maison  >  Article  >  développement back-end  >  Série d'introduction ABP (4) - Définition de la couche de domaine et mise en œuvre de l'entreposage

Série d'introduction ABP (4) - Définition de la couche de domaine et mise en œuvre de l'entreposage

黄舟
黄舟original
2017-01-16 17:26:382980parcourir

Dépôt : le référentiel est utilisé pour faire fonctionner la base de données pour l'accès aux données. L'interface d'entreposage est définie au niveau de la couche domaine, tandis que la classe d'implémentation de l'entreposage doit être écrite au niveau de la couche infrastructure.

Dans ABP, la classe d'entreposage doit implémenter l'interface IRepository, qui définit les méthodes d'ajout, de suppression, de modification et d'agrégation couramment utilisées, y compris les méthodes synchrones et asynchrones. Il comprend principalement les méthodes suivantes :


Série dintroduction ABP (4) - Définition de la couche de domaine et mise en œuvre de lentreposage

ABP fournit une implémentation par défaut de cette interface pour différents frameworks ORM
pour EntityFramework, Fournit l'implémentation de la version générique de EfRepositoryBase.
Pour NHibernate, l'implémentation de la version générique de NhRepositoryBase

La mise en place de la version générique fait que la plupart du temps, ces méthodes suffisent à répondre aux besoins des entités générales. Si ces méthodes sont suffisantes pour l'entité, nous n'avons pas besoin de créer l'interface/classe de référentiel requise par cette entité.

Vous pouvez définir directement la référence de l'entrepôt dans la couche de service applicatif puis l'injecter via le constructeur. L'entreposage de tâches peut être utilisé dans notre couche de service d'application de la manière suivante :

public class TaskAppService : ITaskAppService { 
private readonly IRepository<Task> _taskRepository; 
public TaskAppService(IRepository<Task> taskRepository) 
{ 
    _taskRepository = taskRepository; 
}

Il s'agit de la méthode utilisée dans l'exemple de code

2. Comment implémenter l'entreposage personnalisé

Supposons que nous ayons besoin de savoir quelles tâches sont assignées à un certain utilisateur.

Dans la couche de domaine, créez le dossier IRepositories, puis définissez IBackendTaskRepository.

namespace LearningMpaAbp.IRepositories
{/// <summary>/// 自定义仓储示例/// </summary>public interface IBackendTaskRepository : IRepository<Task>
{    /// <summary>
    /// 获取某个用户分配了哪些任务
    /// </summary>
    /// <param name="personId">用户Id</param>
    /// <returns>任务列表</returns>
    List<Task> GetTaskByAssignedPersonId(long personId);
}
}

Dans la couche infrastructure, l'entreposage est implémenté.

namespace LearningMpaAbp.EntityFramework.Repositories
{public class BackendTaskRepository:LearningMpaAbpRepositoryBase<Task>,IBackendTaskRepository{   
public BackendTaskRepository(IDbContextProvider<LearningMpaAbpDbContext> dbContextProvider) : base(dbContextProvider)
    {
    }    /// <summary>
    /// 获取某个用户分配了哪些任务
    /// </summary>
    /// <param name="personId">用户Id</param>
    /// <returns>任务列表</returns>
    public List<Task> GetTaskByAssignedPersonId(long personId)
    {        var query = GetAll();        if (personId>0)
        {
            query = query.Where(t => t.AssignedPersonId == personId);
        }        return query.ToList();
    }
}
}

Cette implémentation du référentiel hérite de la classe abstraite générique LearningMpaAbpRepositoryBase générée par le modèle, puis implémente l'interface IBackendTaskRepository. Ici, vous devez déclarer explicitement le constructeur paramétré de la classe d'implémentation et utiliser le générique IDbContextProvider pour transmettre la sous-classe de contexte de base de données ChargeStationContext au constructeur de la classe parent.

Série dintroduction ABP (4) - Définition de la couche de domaine et mise en œuvre de lentreposage


3. Précautions d'entreposage

Dans la méthode d'entreposage, ABP ouvre et ferme automatiquement la connexion à la base de données.

Lorsque la méthode d'entreposage est appelée, la connexion à la base de données est automatiquement ouverte et la transaction est démarrée.

Lorsqu'une méthode de référentiel appelle une autre méthode de référentiel, elles partagent en fait la même connexion à la base de données et la même transaction.

Les objets du référentiel sont temporaires car l'interface IRepository hérite de l'interface ITransientDependency par défaut. Par conséquent, le conteneur IOC créera automatiquement une nouvelle instance de l'objet d'entreposage uniquement lorsqu'il devra être injecté.

Le référentiel générique par défaut peut répondre à la plupart de nos besoins. Ce n'est que si cela n'est pas satisfait qu'un référentiel personnalisé sera créé.

Le code source a été téléchargé sur Github-LearningMpaAbp pour votre propre référence.
Catalogue de la série d'introduction ABP - Exercices pratiques pour apprendre le framework Abp

Ce qui précède est la série d'introduction ABP (4) - le contenu de la définition de l'entreposage et de la mise en œuvre au niveau du domaine. Pour plus de contenu connexe, veuillez. faites attention au site Web PHP chinois (www.php.cn) !


Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn