문제

엔티티 프레임 워크에 사용하는 대체 패턴은 무엇입니까?

내가 아는 일부는 다음과 같습니다.

  1. "일반"EntityFramework -일명 작업의 일명

    using (Data.Model c = new Data.Model())
    {
        var z = c.Users.Where(x=>x.Name=='John');
    }

  2. 저장소 패턴

    //Model implements IRepository
    User user = Model.Instance.Get<User>(u => u.Name == "John");
    

  3. 또 뭐야?
  4. ?
도움이 되었습니까?

해결책

보기 좋은 책은 Martin Fowler 's입니다. "엔터프라이즈 애플리케이션 아키텍처 패턴".

그곳에서 그는 DTOS, 작업 단위, 저장소 패턴 등과 같은 데이터를 검색/매핑하기위한 몇 가지 패턴을 거칩니다 ... 아마도 엔티티 프레임 워크와 함께 유용 할 수 있습니다. 나는 그것을 봐야 할 것이다.

다른 팁

UI/컨트롤러/서비스에서 직접 엔티티 프레임 워크를 사용하고 있다는 가정에 따라 귀하의 질문에 답변합니다.

UI/컨트롤러/서비스에 직접 EF를 포함하는 ORM을 사용하면 향후 많은 문제가 발생한다는 것이 입증되었습니다. 게다가, 불가능하지는 않지만 응용 프로그램을 테스트하는 것이 너무 어렵게 만듭니다.

두 번째 접근법, 즉 "모델 구현 저장소"도 제 생각에 잘못된 것입니다. Becuase 모델과 respositories는 다른 책임을 가지고 있으며 견고한 원칙의 "단일 책임"부분을 기반으로 두 개념을 합쳐서는 안됩니다. 내가 권장하지 않는 모델에서 활성 객체 패턴을 사용하려면 사용하는 ORM에서 모델을 분리해야합니다.

가장 잘 권장되는 솔루션은 패턴에서 알 수 있듯이 매우 기본적인 멤버와 Irepository 또는 Irepository와 같은 인터페이스를 갖는 것입니다. 같은 것 :

Interface IRepository<T> where T:class
{
    void Insert(T entity);
    void Update(T entity);
    void Delete(T entity);

    // if you don't want to return IQueryable
    T FindById(object id);
    IEnumerable FindXXXXX(params)

    // if you prefer to return an IQueryable
    IQueryable<T> Find(Expression<Func<T, bool>> predeicate);
}

일부 poeple beleive 리포지토리는 iqueryable을 반환해서는 안됩니다. 또한 표현 및 람다 대신 ispecification을 사용하는 것을 고려할 수 있습니다.

대부분의 엔티티에 대해 Irepositoy 인터페이스를 구현해야합니다. 이 접근법을 사용하면 단위 테스트를 작성할 때 저장소를 조롱 할 수도 있습니다. 생산시 Unity, Nineject, Linfu, Catsle 등과 같은 IOC 제공 업체를 사용해야합니다. 또한 Microsoft의 일반적인 서비스 로케이터 구현을 통해 지정된 IOC 프레임 워크와의 커플 링을 피할 수 있습니다.

예전에는 특정 비즈니스 도메인이나 서비스를 위해 이식 된 데이터 액세스 인터페이스를 가지고있었습니다. 이 접근법의 문제 중 하나는 소스 코드를 추적하면 결국 다른 데이터 액세스 서비스에서 중복 코드로 끝나는 것입니다.

당사는 귀하의 작업 단위 예제와 유사한 코드를 사용합니다.

우리가하는 일은 객체를 데이터 전송 객체에 매핑하는 것입니다.

주제에 관한 많은 기사가 있지만, 좋은 기사를 원한다면 목록이 크게 줄어 듭니다. MSDN Magazine 의이 기사 N-Tier 응용 프로그램을 구체적으로 다루지 만 꽤 좋습니다. 그러나 당신이 당신이 짓는 것을 말하지 않기 때문에 도움이 될 것입니다.

LINQ 2 SQL은 대안이 될 수 있습니다. 여기에 기사가 있습니다 Unity 및 Linq에서 SQL Datacontexts를 통한 의존성 주입

Unity- http://unity.codeplex.com/

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top