0

음,이 DB 모델 "예약"매핑 작업은 어디에서해야합니까? 저장소 또는 서비스 계층?

public class Book { 
    public int Id { get; set; } 
    public string Title { get; set; } 
    public string Author { get; set; } 
    public bool IsSubmitted { get; set; } 
    public bool IsCompleted { get; set; } 
    public bool IsDeleted { get; set; } 
}  

이 그리고 내 GetBook(int id) 방법은 다음과 같이 보이는 Book 반환 어디 저장소 패턴을 구현 한 님의

그러나
public Book GetBook(int id) { 
    return db.Books.Find(id); 
} 

, 내 BookViewModel 요구 다른 것들도 쿼리하십시오.

public class BookViewModel 
{ 
    public int Id { get; set; } 
    public string Title { get; set; } 
    public string AuthorName { get; set; } 
    public int CommentsCount { get; set; } 
    public int FeedbacksCount { get; set; } 
    public int ViewsCount { get; set; } 
} 

현재 내 서비스 계층은 바인딩 모델을 DB 모델에 매핑하여 저장소로 전달하고 있습니다. 내 질문에이 추가 (보기 별) 데이터를 어디에서 쿼리해야합니까? CommentsCount, FeedbacksCount, ViewsCount 등을위한 별도의 리포지토리 메서드를 작성하고 내 뷰 모델을 준비하기 위해 내 서비스 계층에서 호출해야합니까? 반환 형식이 단일 쿼리에서 모든 필수 데이터를 쿼리하는 BookViewModel과 함께 새 리포지토리 메서드를 작성해야합니까?

도움이 매우 감사합니다.

답변

0

리포지토리 메서드는 DTO를 매핑하고 반환하거나 받아야하며 DAL 계층은 MVC 프로젝트를 알지 않아야하며 DTO에 대해서만 알고 있어야합니다.

+0

그런 경우 필자는 CommentsCount, FeedbacksCount 등을 위해 데이터베이스를 여러 번 쿼리하는 이전 솔루션을 사용해야 만합니까? 많은 양의 데이터가있는 경우 비효율적이지 않습니까? 이 문제를 해결할만한 방법이 있습니까? – Aneeq

+0

저장소에 GetComments, 과 같은 메소드가 있어야합니다. 따라서 CommentsCount 서비스 레이어에서 GetComments 메소드를 호출하고 .Count()를 사용하여 카운트 할 수 있습니까? viewModel을 준비하는 저장소에서 실제로 메소드를 작성하지 않아야합니다. – waterdev

관련 문제