본문 바로가기

백엔드/닷넷

서버 아키텍처 - 지네릭 레포지토리

반응형

레포지토리는 정적 타입을 가지는 데 이는 엔티티가 증가할 때마다 레포지토리를 추가로 생성해야 하는 불편함을 줍니다. 지네릭은 동적으로 타입을 지정하는 기능으로 지네릭 레포지토리를 사용하여 하나의 레포지토리를 여러 엔티티가 공유하는 방법을 보겠습니다.

프로젝트 구성하기

프로젝트 생성 및 기본구조 구성

 

서버 아키텍처 - 프로젝트 분산하기

서버 구조 인터페이스는 서버에 대한 요청과 응답처리하며 데이터베이스에 전송할 쿼리를 작성하고 데이터를 받는 역할을 수행하는 인프라스트럭처 프로젝트에 의존합니다. 인프라스트럭처

jin-co.tistory.com

MVC 패턴구현하기

 

서버 아키텍처 - 엠브이씨

비즈니스 로직과 데이터를 처리하는 코드는 분산하는 것이 좋습니다. 엔티티프레임워크는 MVC 패턴을 제공하는데요. 사용법을 살펴보겠습니다. 프로젝트 구성하기 프로젝트 생성 및 기본구조

jin-co.tistory.com

레포지토리 구성

 

서버 아키텍처 - 레포지토리

비즈니스 로직과 데이터를 처리하는 코드는 분산하는 것이 좋습니다. 엔티티프레임워크의 디비 콘텍스트 사용으로 두 코드의 분산은 가능하지만 프로젝트의 규모가 커지면 컨트롤러에서 디비

jin-co.tistory.com

인터페이스 사용하기

 

서버 아키텍처 - 레포지토리 (인터페이스 사용)

인터페이스는 필요한 사항을 규정하는 일종의 계약서로 레포지토리 패턴에 인터페이스를 추가해 보겠습니다. 프로젝트 구성하기 프로젝트 생성 및 기본구조 구성 서버 아키텍처 - 프로젝트 분

jin-co.tistory.com

지네릭 인터페이스 생성

인터페이스 폴더에 지네릭 인터페이스를 추가합니다

인터페이스에 아래와 같이 동적 타입을 지정하고 타입제한을 설정하고 (타입제한을 설정하지 않으면 추후 레포지토리에서 타입을 지정할 때 오류가 발생합니다)

public interface IGenericRepo<T> where T : <className>

필요한 메서드를 추가합니다

지네릭 레포지토리 생성

인프라스트럭처 폴더에 지네릭 레포지토리를 추가합니다

타입을 추가한 뒤 지네릭 인터페이스로 부터 상속받고 메서드를 구현합니다.

public class GenericRepo<T> : IGenericRepo<T> where T:Item
{
  public List<T> GetAll()
  {
    throw new NotImplementedException();
  }
}

메서드를 구현할 때 동적타입을 지정하기 위해 Set<T>()를 사용합니다

서비스 추가하기

생성한 인터페이스를 사용하려면 서비스로 등록이 필요합니다. 아래 코드를 Program.cs 파일에 추가합니다

builder.Services.AddScoped(typeof(IGenericRepo<>), typeof(GenericRepo<>));

컨트롤러 클래스에서 지네릭 레포지토리 메서드 호출하기

지네릭을 사용하지 않은 레포지토리 패턴은 아래와 같은데요. 먼저, 레포지토리를 지우고 지네릭 레포지토리를 주입합니다.

private readonly IGenericRepo<Item> _itemRepo;
public StoreController(IGenericRepo<Item> itemRepo)
{
  this._itemRepo = itemRepo;
}

레포지토리에서 생성한 메서드를 호출합니다.

[HttpGet]
public List<Item> GetItems()
{
  return _itemRepo.GetAll();
}

이상으로 지네릭 레포지토리 패턴을 사용하는 방법을 보았습니다.

 

728x90
반응형