이 섹션에서는 주로 도메인 레이어를 다룹니다. 먼저 ABP 아키텍처와 템플릿에서 생성된 솔루션 간에 일대일 대응이 필요합니다. 이 단계에서 작업을 단순화하기 위해 온라인에서 사용할 수 있는 코드 생성기가 있지만 초보자에게는 권장되지 않습니다.
1. 먼저 ABP 아키텍처를 살펴보겠습니다.
도메인 레이어는 비즈니스 레이어이며 모든 비즈니스의 핵심입니다. 규칙은 도메인 계층에서 수행되어야 합니다.
엔티티: 엔터티는 비즈니스 도메인의 데이터와 작업을 나타내며 실제로 이를 데이터베이스 테이블에 매핑하는 데 사용됩니다.
리포지토리(Repository): 리포지토리는 데이터 접근을 위한 데이터베이스를 운영하는데 사용됩니다. 웨어하우징 인터페이스는 도메인 계층에서 정의되는 반면, 웨어하우징 구현 클래스는 인프라 계층에서 작성되어야 합니다.
도메인 서비스: 처리된 비즈니스 규칙이 둘 이상의 엔터티에 걸쳐 있는 경우 도메인 서비스 메서드로 작성되어야 합니다.
도메인 이벤트: 도메인 레이어에서 특정 상황이 발생할 때 도메인 이벤트가 발생하고 해당 위치에서 캡처 및 처리될 수 있습니다.
작업 단위: 작업 단위는 수정된(예: 추가, 삭제, 업데이트 등) 비즈니스 개체 목록을 유지하는 데 사용되는 디자인 패턴입니다. 이러한 비즈니스 개체의 지속성 및 동시성 문제를 조정하는 역할을 담당합니다.
2. 솔루션을 다시 살펴보겠습니다
솔루션의 각 프로젝트가 어떤 레이어에 해당하는지 확인한 후 Task 엔터티를 생성하기 시작했습니다.
3. 작업 엔터티 생성
1. 도메인 레이어에 Tasks 폴더를 생성하고 ABP의 모든 엔터티 클래스를 생성합니다. IEntity 인터페이스를 구현하며 IEntity 인터페이스는 제네릭을 통해 기본 키 ID 유형을 지정하는 일반 인터페이스입니다.
Task를 생성할 때 반드시 생성 시간을 절약해야 합니다. 이 공통 기능은 감사 모듈에서 IHasCreationTime을 구현하여 달성할 수 있습니다. 코드는 TaskState 상태 열거를 정의하는
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 }}
//TODO: Define an IDbSet for your Entities... public IDbSet<Task> Tasks { get; set; }
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(); } } } }
new DefaultTestDataForTask(context).Create();
참고용으로 소스 코드가 Github-LearningMpaAbp에 업로드되었습니다.
ABP 입문 시리즈 카탈로그 - Abp 프레임워크 학습을 위한 실습