2009-07-08 4 views
5

.NET 1.1 (C#)에서 리포지토리 패턴을 사용하는 일반적인 방법은 무엇입니까?.NET 1.1의 리포지토리 패턴

나는 .NET 1.1에서 제네릭이 없으므로 this Stack Overflow question이라는 줄을 따라 찾고 있습니다. 그래서 나는 그것이 가능할지를보기 위해 찾고 있습니다. (확실합니다) 어떻게 그것이 일반적으로 행해지는지에 대한 것입니다.

답변

1

매우 가능하지만 공통 인터페이스를 사용하지 않거나 많은 양을 사용해야합니다. 인터페이스를 사용하여 ...

public interface IRepository 
{ 
    public object Get(int id); // or object id 
    public void Save(object obj); 
} 

public class CustomerRepository : IRepository 
{ 
    public object Get(int id) { // implementation } 
    public void Save(object obj) { // implementation } 
} 

이 잘 작동하지만 호출 코드가 구체적인 구현에 올바른 유형의 개체 및 방법을 캐스팅하는 유형을 확인하고 예외를 발생합니다. 직접 형변환은 런타임 예외를 요구하므로이 접근법을 피할 것입니다.

내가 권장하는 접근 방식은 리포지토리에서 공통 인터페이스를 구현하지 않는 것입니다. 대신 규칙에 따라 일반적으로 명명 된 메서드를 구현하도록합니다.

public class CustomerRepository 
{ 
    public Customer Get(int id) { // implementation } 
    public void Save(Customer entity) { // implementation } 
} 

public class EmployeeRepository 
{ 
    public Employee Get(int id) { // implementation } 
    public void Save(Employee entity) { // implementation } 
} 

수정 사항 : 링크 된 답변을 다시 읽었습니다. 마지막 전체 단락은 나를 잃어 버리지 만 DI를 사용하여 약간 확장 할 수 있습니다. 대부분의 경우 DI를 사용하여 "일반"(이 경우 공통 인터페이스에서 파생 된 의미) 저장소를 주입하는 것은 의미가 없습니다. 일반적인 방법 외에도 저장소에는 GetCustomersWithPastDueAccounts과 같은 항목 별 메서드가 있습니다. 해당 메서드를 사용하여 ICustomerRepository를 정의하고 CustomerRepository에서 구현할 수 있습니다. 그런 다음 종속성 삽입을 사용하여 런타임에 CustomerRepository를 주입 할 수 있습니다. 아무 문제가 없지만 제 경험상 리파지토리의 여러 구현체를 사용하는 것이 매우 드물기 때문에 그렇게하는 것이 중요하지 않습니다.

+0

두 번째 접근 방식을 사용하면 종속성을 주입 할 수있는 능력을 잃지 않습니까? –

+1

수동 종속성 주입을 항상 수행 할 수 있습니다. 그러나 맞습니다. DI 프레임 워크를 사용하여 종속성 주입을 수행 할 수 없습니다. 내 대답을 편집하고 더 많은 설명을 추가하겠습니다. –

+0

기본적으로 각 저장소에 대한 인터페이스가 있으며 DI에 사용할 수 있습니다. 10 개의 엔티티, 10 개의 인터페이스, 최소 10 개의 구현. 맞지? –

0

내가 잘못 읽은 것이 아니라면 링크 된 질문의 대답은 제네릭을 사용하지 않습니다. 그는 인터페이스를 정의하고 "generic"이라는 용어를 사용하여 인터페이스가 모델의 특정 테이블에 직접 연결되어 있지 않다는 것을 의미합니다.

+0

IEntityRepository에서 이러한 7 가지 기능의 서명은 어떤 모양입니까? –

+1

그는 IRepository 인터페이스를 사용하는 저장소 구현을 말합니다. –

관련 문제