DataAccess Layer 및 클래스, 함수는 어디에 두어야합니까?

c# dapper data-access-layer

문제

Dapper 를 사용하여 데이터 액세스 클래스를 사용하여 클래스를 채 웁니다. 이 수업에서는 모든 CRUD 작업을 수행합니다.

public class Product
{
   public int id { get; set; }
   public string description {get;set;}
   public string value {get;set;}
}

public class ProductDa
{
  //CRUD operations using Dapper
  public List<Product> GetAllElements();
}

이제 특정 값을 가진 요소의 수를 반환하는 함수를 만들어야합니다.

Public int ReturnCountValue(int val)

이 함수에서는 GetAllElements 를 호출 한 다음 LINQ를 사용하여 원하는 값을 반환합니다.

내가 궁금한 건, ReturnCountValue 함수를 어디에 두어야 하는가 : ProductDa (데이터 액세스 레이어) 또는 Product (기본 클래스)?

수락 된 답변

당신이 사용하고있는 패턴을 감안할 때, 당신에게 좋은 정신 모델은 다음과 같을 것이라고 생각합니다.

Product 은 데이터베이스의 한 행을 나타냅니다. 특히 오래된 스마트 C # 개체 (POCO)로 특히 현명한 작업은 아닙니다. 귀하의 예제에서와 같이 단순히 자동 속성 모음이어야합니다.

ProductDa 는 데이터 액세스가 발생하는 곳이어야합니다. 데이터에 액세스하고 있는지 확인하려면 "이 방법을 구현하기 위해 데이터베이스에 쿼리할까요?"라고 물어보십시오. 또는 "Dapper를 사용하여이 방법을 구현합니까?" 대답이 '예'이면 데이터베이스와의 상호 작용이 해당 클래스와 메소드에 적용됩니다.

LINQ의 Count() 메서드를 사용해야하는지 아니면 번들로 묶어야하는지에 관해서는 데이터 액세스 수준에서 Count() 메서드를 번들링하지 않아야합니다. 데이터 액세스 계층은 데이터베이스를 쿼리하는 방법에 대한 세부 정보를 추상화해야합니다. 귀하의 데이터 액세스 레이어 ( Count , Any , First 등)의 소비자에 의한 추가 조작은 괜찮습니다. 또한 List<Product> 반환하기 때문에 List.Count 속성에 액세스 할 수 있으므로 호출자가 액세스 할 수 있습니다.

이 모든 것을 감안할 때, 나는 ProductDa 클래스를 다음과 같이 수정한다.

public class ProductDa
{
    //CRUD operations using Dapper
    public List<Product> GetAllElements();
    //query database using Dapper to get all the elements where Value == value
    public List<Product> GetAllElementsWithValue(int value);
}

돌려 주어지는 Product 의 수를 취득하기 위해서 다음과 같이 클래스를 소비합니다.

var dataAccess = new ProductDa();
var threeValuedItems = dataAccess.GetAllElementsWithValue(3);
int numberOfItems = threeValuedItems.Count;

또는보다 간결하게 :

var dataAccess = new ProductDa();
var numberOfItemsWithValueThree = dataAccess.GetAllElementsWithValue(3).Count;

인기 답변

어떤 ReturnCountValue 메서드도 작성하지 말고, 여러분의 메서드 대신 LINQ를 Count로 사용하십시오. DAL 대신 저장소를 강력히 추천했습니다. 이리



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow