>백엔드 개발 >C#.Net 튜토리얼 >ABP 입문 시리즈(3) - 도메인 계층에서 엔터티 생성

ABP 입문 시리즈(3) - 도메인 계층에서 엔터티 생성

黄舟
黄舟원래의
2017-01-16 17:24:032184검색

이 섹션에서는 주로 도메인 레이어를 다룹니다. 먼저 ABP 아키텍처와 템플릿에서 생성된 솔루션 간에 일대일 대응이 필요합니다. 이 단계에서 작업을 단순화하기 위해 온라인에서 사용할 수 있는 코드 생성기가 있지만 초보자에게는 권장되지 않습니다.

1. 먼저 ABP 아키텍처를 살펴보겠습니다.

ABP 입문 시리즈(3) - 도메인 계층에서 엔터티 생성

도메인 레이어는 비즈니스 레이어이며 모든 비즈니스의 핵심입니다. 규칙은 도메인 계층에서 수행되어야 합니다.
엔티티: 엔터티는 비즈니스 도메인의 데이터와 작업을 나타내며 실제로 이를 데이터베이스 테이블에 매핑하는 데 사용됩니다.
리포지토리(Repository): 리포지토리는 데이터 접근을 위한 데이터베이스를 운영하는데 사용됩니다. 웨어하우징 인터페이스는 도메인 계층에서 정의되는 반면, 웨어하우징 구현 클래스는 인프라 계층에서 작성되어야 합니다.
도메인 서비스: 처리된 비즈니스 규칙이 둘 이상의 엔터티에 걸쳐 있는 경우 도메인 서비스 메서드로 작성되어야 합니다.
도메인 이벤트: 도메인 레이어에서 특정 상황이 발생할 때 도메인 이벤트가 발생하고 해당 위치에서 캡처 및 처리될 수 있습니다.
작업 단위: 작업 단위는 수정된(예: 추가, 삭제, 업데이트 등) 비즈니스 개체 목록을 유지하는 데 사용되는 디자인 패턴입니다. 이러한 비즈니스 개체의 지속성 및 동시성 문제를 조정하는 역할을 담당합니다.

2. 솔루션을 다시 살펴보겠습니다

ABP 입문 시리즈(3) - 도메인 계층에서 엔터티 생성

솔루션의 각 프로젝트가 어떤 레이어에 해당하는지 확인한 후 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    
  }}

입니다. 그리고 특정 사용자에게 할당된 작업을 저장하기 위해 AssignedPerson 탐색 속성을 추가했습니다. [필수] 및 [최대 길이] 기능은 입력 확인에 사용됩니다.

3. 엔터티를 정의한 후 Code First 데이터 마이그레이션을 적용하려면 DbContext에서 해당 엔터티에 해당하는 DbSet을 정의해야 합니다. 기본 서비스 계층, 즉 EntityFramework로 끝나는 프로젝트에서 DbContext 클래스를 찾아 다음 코드

//TODO: Define an IDbSet for your Entities... public IDbSet<Task> Tasks { get; set; }

를 추가합니다. 4. Code First 데이터 마이그레이션을 수행합니다.

패키지 관리자 콘솔을 열고 Entityframework에 해당하는 프로젝트를 기본 프로젝트로 선택합니다. Add-Migration Add_Task_Entity를 실행하여 마이그레이션을 생성합니다.

성공적으로 생성되면 Migrations 폴더에 time_Add_Task_Entity 형식의 클래스 파일이 생성됩니다. 주의 깊게 살펴보면 Migrations 폴더 아래에 SeedData 폴더가 있다는 것을 알 수 있습니다. 이름에서 알 수 있듯이 이 폴더의 클래스는 주로 시드 데이터를 사전 설정하는 데 사용됩니다. 기존 클래스의 작성 방법을 참조하여 두 개의 Task를 미리 설정할 수 있습니다. 다음 코드를 사용하여 DefaultTestDataForTask 클래스를 만듭니다.

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();      
         }    
         }
         }
         }

그런 다음 Configuration 클래스의 Seed 메서드에 다음 코드를 추가합니다.

new DefaultTestDataForTask(context).Create();

패키지 관리자 콘솔에서 Update-Database를 입력하고 Enter 키를 눌러 마이그레이션을 수행합니다. 실행이 성공한 후 데이터베이스를 확인하여 Tasks 테이블이 성공적으로 생성되었으며 두 개의 테스트 데이터가 테이블에 이미 존재하는지 확인합니다.

이 시점에서 Task 엔터티 클래스가 성공적으로 생성되었습니다.

참고용으로 소스 코드가 Github-LearningMpaAbp에 업로드되었습니다.
ABP 입문 시리즈 카탈로그 - Abp 프레임워크 학습을 위한 실습

위는 ABP 입문 시리즈(3) - 도메인 레이어에서 엔터티를 생성하는 내용입니다. PHP 중국어 홈페이지(www.php.cn)를 주목해주세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.