매핑

2014-03-30 2 views
0

나는 내 코드의 일부를 매핑 :매핑

var authors = _repository.FindAll().Where(x => x.IsActive == 1).ToList(); 
authorViews = authors.ModelToViewModelCollection(); 

하지만 내 수석 저장소 층 내부에 다음과 같이 나를지도하는 것이 좋다 : 차이가

return (from c in Context.Books 
        .Where(x=>x.IsActive == 1) 
        select new BookDetailsView 
        { 
         ID = c.ID, 
         TitleB = c.TitleB, 
         TitleE = c.TitleE, 

        }).ToList(); 

무엇 둘 사이.

답변

1

첫 번째 경우 컨트롤러 (또는 서비스)가 EF를 직접 조작하여 쿼리를 작성한다는 점이 다릅니다. 어떻게 작성하든 관계없이 저장소 패턴이 아닙니다.

두 번째 방법은 저장소에서 EF 조작을 유지하고 뷰 모델을 직접 반환하므로 상위 계층은 사용자가 EF를 사용하고 있는지 여부를 알지 못하고 쿼리를 작성할 필요가 없습니다.

리포지토리의 목적은 다른 레이어를 지속성에서 분리하는 것입니다. 즉, 다른 레이어는 리포지토리에 대해서만 알고 해당 개체 만 처리해야합니다. 이 방법으로, 영속성은 다른 레이어에 영향을 미치지 않고 객체를 저장/검색하는 방법을 최적화 할 수 있습니다. 즉, EF, Nhibernate, mongo db 등을 지속성에 사용할 수 있다는 것을 의미합니다. 앱 및 비즈니스 계층 또는 UI에 대해 가장 잘 알고있는 점에 따라 영속성을 바꿀 때 변경할 필요가 없습니다.

db를 변경하거나 지속성을 변경하는 시간이 얼마나되는지 궁금하다면 db 전환은 매우 드물지만 지속성 모델 (테이블, 열 등)을 변경하는 것은 특히 개발시 매우 자주 발생합니다. 리포지토리는 지속성에서만 변경 사항을 유지하도록 도와줍니다.

+0

데이터 검색 중에 영향이 있습니까? 내 모델 클래스에는 8 개의 속성이 있지만 viewmodel 클래스에는 03 만 포함되어 있다고 가정합니다. 두 번째 옵션을 수행하면 데이터 검색 성능을 향상시킬 수 있습니까? –

+0

귀하의 모델에 따르면 EF (지속성) 모델을 언급하고 있다고 가정합니다. 저장소는 성능 향상을위한 것이 아니며, 일을 분리시키는 것입니다. 귀하의 경우에는 성능 차이가 없다고 생각합니다. 쿼리는 동일하지만 더 복잡한 모델을 포함하는 다른 경우에는 리파지토리가 필요한 모든 DB 마법을 유연하게 수행 할 수 있습니다. – MikeSW