n-Tier 설계와 관련된 Dapper (BLL / DAL)

bll business-logic-layer dapper data-access-layer

문제

Dapper에 대한 기본적인 논리적 질문이 있습니다.

Dapper가 DAL과 BLL 사이의 경계선을 흐리게 처리합니까? 많은 권장 사항은 DAL이 BLL에 대해 전혀 알지 못하고 DAL이 BLL이 유용한 개체로 변환해야하는 데이터의 일부를 반환해야한다는 것입니다.

Dapper가 들어 맞는 전문가의 의견을 듣고 싶습니다.

훌륭한 프로젝트이며 잘 작동하지만 BLL과 밀접하게 결합 된 것처럼 보입니다. 나는 개인적으로 접근법에 반대하지 않지만, 1) Dapper와 BLL을 분리하는 더 좋은 방법이 있는지 또는 2) MS SQL에서 벗어날 계획이 없으므로 실제 문제가 아닌지 궁금해했습니다.

감사.

편집 : 마크의 코멘트에 대한 응답으로 :

Dapper는 훌륭한 제품이고 이것은 어떤면에서도 슬램이 아닙니다 ... BLL과 결합 된 것은 쿼리를 실행할 때 일반적으로 특정 유형의 컬렉션을 반환한다는 것입니다.

var dog = connection.Query<Dog>("select Age = @Age, Id = @Id", new { Age = (int?)null, Id = guid });

이 경우 쿼리는 Dog 컬렉션을 반환합니다.

Dapper가 DAL 계층에 배포 된 경우 반환 할 객체의 유형을 알기 위해서는 BLL 계층에 대한 참조가 있어야합니다.

많은 권장 사항은 DAL이 BLL에 대해 전혀 알지 못한다는 것입니다. 나는 Dapper를 배치하고 좋은 N-Tier 디자인 구조를 유지하는 최상의 방법을 모색하려고합니다.

나는 그것이 다소 주관적이라고 알고 있지만, 스택 오버 플로우를 강화하기에 충분하다면, 모두 잘 설계된 환경에 배치하는 것이 가장 좋은 방법이라고 생각했을 것입니다.

편집 : HTML 기호로 인해 "Dog"의 유형이 쿼리 예제에 표시되지 않은 것으로 나타났습니다.

호간의 의견에 대한 응답으로 다시 편집 : 내 질문의 핵심은 위의 코드 줄이 DAL에있을 것이라는 아이디어와 더 관련이 있습니다. 명확하게하기 위해 DAL과 BLL을 별도의 클래스 프로젝트로 사용하는 솔루션이 있다고 가정 할 수 있습니다. 이제이 코드 줄이 DAL 프로젝트에 들어갈 때 DAL은 "Dog"개체를 가져 오기 위해 BLL을 참조해야합니다. 이 상호 의존성은 괜찮습니까? 또는 Dapper가 가장 일반적으로 사용되는 방식일까요? 아니면 Dapper를 사용하는 것이 가장 좋은 방법이 아닌가? 나는 많은 순수 주의자들이 DAL이 BLL에 대해 아무것도 알지 못한다고 말할 것임을 안다. 위 라인의 "Dog"객체에 의존하는 것은 그 원칙에 위배된다. 그러나 위의 줄은 Dapper의 가장 일반적인 사용 예인 것 같습니다.

수락 된 답변

dapper를 데이터베이스 용 으로 생각하십시오. http://samsaffron.com/archive/2012/01/16/that-annoying-insert-problem-getting-data-into-the-db-using-dapper

Dapper는 리포지토리 나 특정 패턴을 사용하도록 강요하지 않습니다.

비즈니스 로직을 어디에 둘 것인지 알려주지는 않습니다. 데이터 액세스 코드로 비즈니스 로직을 혼란에 빠뜨리고 싶다면 그렇게하십시오. 그렇지 않으면하지 마십시오. 대퍼는 불가지론 자입니다. 이는 간단한 데이터 액세스 기술입니다.


인기 답변

나는 당신의 질문이 문맥을 무시하고 있다고 생각합니다. DAL과 BLL은 종종 문맥에 관한 것입니다. 프로젝트의 클래스, 네임 스페이스 및 경로와 관련하여 라인 코드가있는 소스 파일에 대한 단일 코드 줄 (질문과 비슷 함)이 아닙니다. 좋은 DAL 및 BLL을 작성하고 올바른 도구를 사용하면 문제가 즉시 해결 될 것이라고 생각하는 프로그래머는 이러한 문제를 무시합니다.

위에서 제시 한 코드를 기반으로 몇 가지 예를 들어 설명하겠다.

프로젝트의 소스 코드를 읽었을 때 * .aspx.cs 파일에 해당 코드 줄이 발견되면 조금 어려울 것입니다. 이 프로젝트는 n 계층 또는 모듈식이 아닙니다.

반대로, 소스를 읽고 프로젝트의 DAL 하위 디렉터리에있는 dog.cs라는 파일에서이 코드 줄을 발견했다면이 코드는 솔루션의 dog 개체에 대한 데이터 액세스 역할을하도록 의도되었습니다.

디렉터리 호출 BLL에있는 경우 비슷한 결론을 이끌어 낼 수 있습니다.

놓치지 마세요 요점을 이해하십시오 - 당신의 솔루션에 디렉토리 이름 DAL과 BLL을 가져야한다고 제안하는 것은 아닙니다. 단지 이러한 요소를 정의하는 것이 데이터 액세스를 수행하는 코드 섹션 외부에 있다고 말하는 것입니다. . 이러한 코드 라인은 멋지게 설계된 n-tier 시스템에 기여하거나이 계층을 손상시킬 수 있습니다.




아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.