2013-11-01 1 views
0

내 응용 프로그램에 데이터 레이어를 추가해야하는 프로젝트에서 작업하고 있습니다. 필자는 항상 데이터 계층이 CRUD 기능을 순전히 담당한다고 생각했습니다. 실제로 어떤 논리도 포함해서는 안되지만 단순히 비즈니스 계층의 데이터를 검색하여 조작해야합니다.데이터 영역의 책임은 무엇입니까?

그러나이 시나리오에서 내 앱을 올바르게 구성했는지 확신 할 수 없기 때문에 약간 혼란 스럽습니다.

기본적으로 특정 가격 임계 값 내에있는 제품 목록을 데이터베이스에서 검색하려고합니다. 지금은 기본적으로 가격> 최소 임계 값 및 가격 < 최대 임계 값을 갖는 모든 제품을 반환하는 데이터 영역에 함수가 있습니다. 하지만 아마도 이것이 잘못된 것 같아요. 데이터 계층이 모든 제품 목록을 반환하면 비즈니스 로직이 필터링을 수행해야합니까?

데이터 계층이 비즈니스 계층에서 원시 데이터를 가져올 수있는 방법을 제공하는지 여부 또는 필터링 된 데이터를 가져 오는 책임을 져야하는지 여부에 대해 혼란스러워합니까?

누구나이 기사를 자세히 설명하면 도움이 될 것입니다.

감사

실제 권리 또는 잘못 여기 방법이 없습니다

답변

1

데이터 계층의 목적은 데이터 저장소와 관련된 데이터 상호 작용을 수행하는 것입니다. 정말로 순수하게 되려면 데이터 레이어를 D ata A bstraction L ayer 및 D ata I ndependence L ayer의 두 부분으로 분리 할 수 ​​있습니다. DIL은 사용자가 연결할 데이터 저장소에 대한 올바른 쿼리를 작성하는 책임이 있습니다 (예 : SQL Server 또는 Oracle을 선택할 수 있음). DAL은 DIL의 맨 위에 위치하며 적절한 방법을 호출하여 데이터를 가져옵니다. needs (예를 들어 호출 할 저장 프로시 듀어를 지정하거나 조회를 위해 table/view를 지정할 수 있지만 실제로 호출을 수행하는 것은 DIL입니다).

데이터 레이어에서 필터를 제거합니다. 즉, 발신자가 임계 값을 통과해야합니다. 의사 코드에서, 당신의 메소드 서명은 다음과 같을 것이다 :

public YourDataObjects[] GetProducts(decimal lowerPrice, decimal upperPrice) { ... } 

거의 모든 언어가 (당신이 사용하는 언어를 지정하지 않은) 것을 가지고 있기 때문에 나는 반환 형식에 대한 배열을 사용했습니다, 이는 임계 값에 decimal 유형을 사용하는 이유이기도합니다.

+0

감사합니다. 이것은 내가 의심했던 것입니다. 데이터 레이어의 단독 책임은 데이터 저장소와의 상호 작용이라고 생각했습니다. – alimac83

1

는, 보통 구현에 가장 적합한 어떤 내려 온다.

'데이터 레이어'또는 '모델'을 사용하는 목적은 필요에 따라 상대적으로 쉽게 완료 레이어를 스왑하고 완전 무언가를 위해 모든 작업을 수행 할 수있게하는 것입니다. 말했다

, 나는 보통 내 모델의 일부로서 반환 된 레코드를 필터링하는 기능을 포함, 뭔가 같은 : 비즈니스 계층에서 생성 될 수

public IEnumerable<object> getAllRows() 
public object getSingle(object o) 
public IEnumerable<object> getFilteredRows(Expression<object> e) 

결과를 필터링 할 수있는 표현 (컨트롤러) 실제 실행은 나중에 데이터 (모델)에 의해 처리됩니다.