Dans cette section, nous traitons principalement de la couche de domaine. Tout d’abord, nous devons établir une correspondance biunivoque entre l’architecture d’ABP et les solutions créées à partir du modèle. Il existe des générateurs de code disponibles en ligne pour simplifier notre tâche à cette étape, mais ils ne sont pas recommandés aux débutants.
1. Tout d'abord, jetons un coup d'œil à l'architecture ABP
La couche domaine est la couche métier et est le cœur d'un projet All business. les règles doivent être accomplies dans la couche de domaine.
Entité : L'entité représente les données et les opérations dans le domaine métier. En pratique, elle est utilisée pour les mapper dans une table de base de données.
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.
Service de domaine : lorsque les règles métier traitées s'étendent sur deux (ou plus) entités, elles doivent être écrites dans la méthode de service de domaine.
Événement de domaine : les événements de domaine peuvent être déclenchés lorsque certaines situations spécifiques se produisent dans la couche de domaine, et ils peuvent être capturés et traités aux endroits correspondants.
Unité de travail : l'unité de travail est un modèle de conception utilisé pour conserver une liste d'objets métier qui ont été modifiés (tels que ajoutés, supprimés, mis à jour, etc.). Il est chargé de coordonner les problématiques de persistance et de concurrence de ces objets métier.
2. Regardons à nouveau la solution
Après avoir déterminé à quelle couche correspond chaque projet de la solution, nous avons commencé à créer l'entité Tâche.
3. Créer des entités de tâche
1. Créez le dossier Tâches dans la couche de domaine et créez la classe d'entité de tâche
2. Toutes les classes d'entités dans ABP héritent d'Entité et d'Entité ; implémente l'interface IEntity ; et l'interface IEntity est une interface générique qui spécifie le type d'ID de clé primaire via des génériques. Le type de clé primaire par défaut d'Entity est le type int.
Lors de la création d'une tâche, vous devez absolument gagner du temps de création. Cette fonction courante peut être réalisée en implémentant IHasCreationTime dans le module d'audit. Le code est le suivant :
namespace LearningMpaAbp.Tasks{ public class Task : Entity, IHasCreationTime { public const int MaxTitleLength = 256; public const int MaxDescriptionLength = 64 * 1024;//64kb public long? AssignedPersonId { get; set; } [ForeignKey("AssignedPersonId")] public User AssignedPerson { get; set; } [Required] [MaxLength(MaxTitleLength)] public string Title { get; set; } [Required] [MaxLength(MaxDescriptionLength)] public string Description { get; set; } public TaskState State { get; set; } public DateTime CreationTime { get; set; } public Task() { CreationTime = Clock.Now; State = TaskState.Open; ; } public Task(string title, string description = null) : this() { Title = title; Description = description; } } public enum TaskState : byte { Open = 0, Completed = 1 }}
qui définit l'énumération de l'état TaskState. Et ajout de l'attribut de navigation AssignedPerson pour enregistrer les tâches assignées à un certain utilisateur. Les fonctionnalités [Required] et [MaxLength] sont utilisées pour la vérification des entrées.
3. Après avoir défini l'entité, nous devons définir le DbSet correspondant à l'entité dans DbContext pour appliquer la migration des données Code First. Recherchez notre couche de service de base, c'est-à-dire que dans le projet se terminant par EntityFramework, recherchez la classe DbContext et ajoutez le code suivant
//TODO: Define an IDbSet for your Entities... public IDbSet<Task> Tasks { get; set; }
4. Effectuez la migration des données Code First.
Ouvrez la console du gestionnaire de packages et sélectionnez le projet correspondant à Entityframework comme projet par défaut. Exécutez Add-Migration Add_Task_Entity pour créer une migration.
Après une création réussie, un fichier de classe au format time_Add_Task_Entity sera créé dans le dossier Migrations. Si nous observons attentivement, nous constaterons qu'il existe un dossier SeedData sous le dossier Migrations. Comme son nom l'indique, les classes de ce dossier sont principalement utilisées pour prédéfinir les données de départ. On peut se référer à la méthode d'écriture des classes existantes pour prédéfinir deux Tâches. Créez la classe DefaultTestDataForTask avec le code suivant :
namespace LearningMpaAbp.Migrations.SeedData{public class DefaultTestDataForTask{ private readonly LearningMpaAbpDbContext _context; private static readonly List<Task> _tasks; public DefaultTestDataForTask(LearningMpaAbpDbContext context) { _context = context; } static DefaultTestDataForTask() { _tasks = new List<Task>() { new Task("Learning ABP deom", "Learning how to use abp framework to build a MPA application."), new Task("Make Lunch", "Cook 2 dishs") }; } public void Create() { foreach (var task in _tasks) { _context.Tasks.Add(task); _context.SaveChanges(); } } } }
Puis dans la méthode Seed de la classe Configuration, ajoutez le code suivant.
new DefaultTestDataForTask(context).Create();
Dans la console du gestionnaire de packages, entrez Update-Database et appuyez sur Entrée pour effectuer la migration. Une fois l'exécution réussie, vérifiez la base de données et vérifiez que la table Tâches est créée avec succès et que deux données de test existent déjà dans la table.
À ce stade, la classe d'entité Task est créée avec succès.
Le code source a été téléchargé sur Github-LearningMpaAbp pour votre propre référence.
Répertoire de la série d'introduction ABP - exercices pratiques pour apprendre le framework Abp
Ce qui précède est le contenu de la série d'introduction ABP (3) - création d'entités dans la couche de domaine Pour un contenu plus connexe, veuillez faire attention au site Web PHP chinois (m.sbmmt.com) !