C #에서 리포지토리 디자인 패턴을 구현하는 방법

디자인 패턴은 애플리케이션에서 반복되는 문제에 대한 솔루션으로 사용되며 리포지토리 패턴은 가장 널리 사용되는 디자인 패턴 중 하나입니다. 즉, 데이터 지속성이 아래에서 발생하는 방식에 대해 신경 쓰지 않고 기본 데이터베이스에서 해당 개체가 실제로 어떻게 유지되는지 알아야 할 필요없이 개체를 유지합니다. 이 지속성에 대한 지식, 즉 지속성 논리는 저장소 내부에 캡슐화됩니다.

본질적으로 리포지토리 디자인 패턴은 데이터 지속성이 실제로 발생하는 방법에 대한 지식이 없어도 응용 프로그램에서 비즈니스 논리와 데이터 액세스 계층의 분리를 용이하게합니다.

리포지토리 디자인 패턴을 사용하면 데이터 저장소에서 데이터가 최종적으로 저장되거나 검색되는 방법에 대한 세부 정보를 숨길 수 있습니다. 이 데이터 저장소는 데이터베이스, xml 파일 등이 될 수 있습니다.이 디자인 패턴을 적용하여 웹 서비스 또는 ORM에 의해 노출되는 데이터에 액세스하는 방법을 숨길 수도 있습니다. Martin Fowler는 "도메인 개체에 액세스하기 위해 컬렉션과 유사한 인터페이스를 사용하여 도메인과 데이터 매핑 계층 사이를 중재합니다."라고 말합니다.

저장소는 메모리에있는 도메인 개체의 모음으로 정의됩니다. MSDN은 "리포지토리를 사용하여 데이터를 검색하는 논리를 분리하고 모델에서 작동하는 비즈니스 논리에서 엔터티 모델에 매핑합니다. 비즈니스 논리는 데이터 소스 계층을 구성하는 데이터 유형과 무관해야합니다. 예를 들어 데이터 소스 계층은 데이터베이스, SharePoint 목록 또는 웹 서비스 일 수 있습니다. "

C #에서 리포지토리 디자인 패턴 구현

이 섹션에서는 리포지토리 디자인 패턴을 프로그래밍하는 방법에 대해 알아 봅니다. 리포지토리 디자인 패턴 구현에서 참여 유형은 다음과 같습니다.

  1. IRepository 인터페이스-이 인터페이스는 모든 Repository 유형의 기본 유형입니다.
  2. 리포지토리 클래스-일반 리포지토리 클래스입니다.
  3. IRepository 인터페이스를 구현하는 하나 이상의 Repository 클래스

이제 몇 가지 코드를 살펴 보겠습니다. 다음 클래스는 모든 엔티티 클래스가 파생되어야하는 기본 엔티티 클래스를 정의하는 방법을 보여줍니다.

public abstract class EntityBase

   {

       public Int64 Id { get; protected set; }

   }

클래스는 "Id"라는 필드가 하나만있는 추상으로 정의됩니다. "Id"필드는 일반적으로 사용하는 모든 엔티티에 공통입니다. 일반적인 IRepository 인터페이스의 모습은 다음과 같습니다.

public interface IRepository where T : EntityBase

   {

       T GetById(Int64 id);

       void Create(T entity);

       void Delete(T entity);

       void Update(T entity);

   }

일반 Repository 클래스는 IRepository 인터페이스를 구현하고 인터페이스의 멤버를 구현합니다.

public class Repository : IRepository where T : EntityBase

   {

       public void Create(T entity)

       {

           //Write your logic here to persist the entity

       }

       public void Delete(T entity)

       {

           //Write your logic here to delete an entity

       }

       public T GetById(long id)

       {

           //Write your logic here to retrieve an entity by Id

           throw new NotImplementedException();

       }

       public void Update(T entity)

       {

           //Write your logic here to update an entity

       }

   }

특정 클래스에 대한 리포지토리 만들기

특정 엔티티에 대한 리포지토리를 생성하려면 일반 IRepository 인터페이스를 구현하는 클래스를 생성해야합니다. 다음 코드 목록은이를 달성하는 방법을 보여줍니다.

public class CustomerRepository : IRepository

   {

       //Write your code here to implement each of the methods of the IRepository interface.

   }

마찬가지로 ProductRepository를 만들려면 먼저 EntityBase 클래스를 확장하는 엔터티 클래스 Product를 만들어야합니다.

public class Product: EntityBase

   {

       public string ProductName { get; set; }

       public string Category { get; set; }

   }

ProductRepository 클래스는 일반 IRepository 인터페이스를 구현해야합니다. ProductRepository 클래스의 모습은 다음과 같습니다.

public class ProductRepository : IRepository

   {

       //Write your code here to implement each of the methods of the IRepository interface.

   }