이 섹션에서는 데이터 관리를 위한 Repository 패턴의 도입과 구현 방법에 대해 배웁니다.
Repository 패턴은 데이터 액세스 로직과 비즈니스 로직을 분리하여 애플리케이션의 유지 보수성을 향상시키는 데 도움이 됩니다.
- Repository 폴더 생성: 프로젝트에 ‘Repository’ 폴더를 추가하고, 이 폴더 안에 ‘IRepository’ 인터페이스와 구현체를 위한 폴더를 생성합니다.
- IRepository 인터페이스 정의: 데이터 액세스를 위한 기본적인 메서드를 정의하는
IPlantRepository인터페이스를 생성합니다. 이 인터페이스에는 다음과 같은 메서드가 포함됩니다:Task Create(Plant plant): 비동기적으로 Plant 객체를 생성합니다.Task Remove(Plant plant): 주어진 Plant 객체를 삭제합니다.Task Save(): 변경 사항을 데이터베이스에 저장합니다.Task<List<Plant>> GetAll(Expression<Func<Plant, bool>> filter = null): 모든 Plant 객체를 검색하거나, 주어진 조건에 따라 필터링합니다.Task<Plant> Get(Expression<Func<Plant, bool>> filter, bool tracked = true): 단일 Plant 객체를 조건에 따라 검색하며, 필요에 따라 추적 여부를 설정할 수 있습니다.
- 메서드 설명:
Create,Remove,Save메서드는 데이터 생성, 삭제, 저장 등의 기본적인 데이터 액세스 작업을 정의합니다.GetAll과Get메서드는 LINQ 표현식을 사용하여 데이터를 검색하고 필터링하는 기능을 제공합니다.Get메서드의tracked매개변수는 Entity Framework Core의 추적 기능을 활성화하거나 비활성화할 수 있게 해줍니다.
- Repository 패턴의 장점:
- 데이터 액세스 로직을 한 곳에 집중시켜 코드의 재사용성과 유지 보수성을 향상시킵니다.
- 비즈니스 로직과 데이터 액세스 로직을 분리하여 애플리케이션의 구조를 명확하게 합니다.
- 단위 테스트와 통합 테스트를 용이하게 합니다.
// IPlantRepository.cs
public interface IPlantRepository
{
Task<List<Plant>> GetAll(Expression<Func<Plant, bool>> filter = null);
Task<Plant> Get(Expression<Func<Plant, bool>> filter = null, bool tracked = true);
Task Create(Plant entity);
Task Remove(Plant entity);
Task Save();
}