모든 가이드 및 자습서에서 설명한대로 저장 프로 시저를 사용하여 DAL에서 objectDataSource 사용자 지정 페이징을 구현했지만 사용자 정의 페이징 논리를 데이터 액세스 계층에서 사용하면 도메인 모델을 사용할 수있는 양이 제한됩니다.ObjectDataSource에 대한 BLL (저장 프로 시저가 아님)에서 사용자 정의 페이징 논리 구현
예를 들어 특정 Office (OfficeId)에 속한 모든 고객 (CustomerId)과 해당 주문 (OrderId)의 상태를 표시하려는 gridview가있는 webform이 있습니다.
ObjectDataSource를 경우 SelectMethod : (이 DDD에 올 때 그래서이 디자인은 크지 않다 확신하지만, 나와 함께 곰 나는 안돼서)
그래서 내 서비스 계층에서 내가 같은 DTO 목록을 채울 수 에 묶여 :public List<CustomerAndOrderDTO> GetCustomersByOffice(int officeId, int startPageIndex, int maxiumRows)
{
List<CustomerAndOrderDTO> customerAndOrderDTO = null;
List<Customer> customers = Customer.GetCustomersByOffice(int officeId);
foreach (Customer customer in customers)
{
customerAndOrderDTO.Add(new CustomerAndOrderDTO(customer));
}
return customerAndOrderDTO;
}
그리고 이것은 DTO 클래스입니다 :
public CustomerAndOrderDTO
{
public int OrderId {get; set;}
public int CustomerId {get; set;}
public CustomerAndOrderDTO(Customer customer)
{
CustomerId = customer.Id;
Order order = customer.GetOrder();
OrderId = order.Id;
}
}
아주 간단한 코드와 도메인 모델 플러스 검증 및 지속성 checki의 모든 유연성과 힘을 얻을 BLL에 머무르는 동안.
도메인에서 개체를 집계 할 때의 이점을 무시하고 select *와 같은 저장 프로 시저 수준에서 데이터를 결합하려는 경우에도 주문을 왼쪽으로 가져 오기 ...에서 왼쪽에 가입 Office on ... where .... 당신은 CustomersOrdersByOfficePaged, CustomersOrdersByAccountDatePaged 등과 같은 모든 가능한 조합을위한 페이징을 구현하는 백만 가지 확장 메서드를 작성하게 될 것입니다 ...
그래서 나는 잘못 시작하고 있습니까? 아니면 서비스 계층의 페이징이 의미가 있습니까? 그렇다면 어떻게 구현합니까?