문제

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

최상의 설계 관행을 시도하는 데 DAL과 BLL 사이의 라인을 흐리게합니까? 많은 권장 사항은 DAL이 BLL에 대해 알지 못하고 DAL은 BLL이 일부 유용한 객체로 변환 해야하는 데이터의 일부 BLOB를 반환해야한다는 것입니다.

dapper가 들어있는 곳에서 여기의 전문가들의 의견을 얻고 싶습니다.

훌륭한 프로젝트이며 잘 작동하지만 BLL과 긴밀하게 결합 된 것처럼 보입니다. 나는 그 접근법에 개인적으로 반대하지 않지만, 1) dapper와 bll을 잃어 버리거나, 2) ms SQL에서 사라질 계획을 세우지 않기 때문에 실제 문제가 없다면 궁금해하지만 궁금해했다.

감사합니다.

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

dapper는 훌륭한 제품이며 이것은 어떤 식 으로든 슬램이 아닙니다 ... BLL과 결합하여 내가 의미하는 것은 쿼리를 실행할 때 일반적으로 특정 유형의 컬렉션을 반환 할 것입니다.

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

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

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

많은 권장 사항은 DAL이 BLL에 대해 아무 것도 알지 못해야한다는 것입니다. 나는 단지 dapper를 배치하고 좋은 n 계층 디자인 구조를 유지하기위한 모범 사례를 확보하려고 노력하고 있습니다.

다소 주관적이라는 것을 알고 있지만 스택 오버플로 전원을 공급할만큼 충분히 좋은 경우 모두 잘 설계된 환경에서 그것을 배포하는 가장 좋은 방법을 알아 냈습니다.

편집 : HTML 기호로 인해 쿼리 예제에 "개"의 theType이 표시되지 않았 음을 알아 차렸다.

Hogan의 의견에 응답하여 다시 편집하십시오. 우리의 질문의 핵심은 위의 코드 줄이 DAL에있을 것임을 생각하는 것과 관련이 있습니다. 선명함을 위해 우리는 DAL과 BLL과 별도의 클래스 프로젝트로 솔루션을 가지고 있다고 가정 할 수 있습니다. 이제이 코드 라인이 DAL 프로젝트에 들어갈 때 DAL은 BLL을 참조하여 "Dog"객체를 가져와야합니다. 이 십자가 의존성이 괜찮습니까? 또는 dapper가 가장 일반적으로 사용되는 방식 만 있습니까? 또는 그것은 나쁜 연습이며, dapper를 사용하는 가장 좋은 방법은 아니 었습니까? 나는 많은 '순수가들'이 DAL이 BLL에 대해 알지 못한다고 말할 것입니다 ... 위의 줄에있는 "개"물체에 의존하는 것은 그 원리를 위반할 것입니다. 그러나 위의 라인은 dapper의 가장 일반적인 예제 사용법 인 것 같습니다.

도움이 되었습니까?

해결책

dapper를 데이터베이스의 랙 http://samsaffron.com/archive/2012/ 01 / 16 / That-Annoying-insert-Problem-Data-into-the-db-using-dapper

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

비즈니스 논리를 어디에 놓을 곳을 알려주지는 않습니다.데이터 액세스 코드로 비즈니스 논리를 혼란스럽게하려면 이렇게하십시오.그렇지 않으면하지 마십시오.dapper는 불가지론 적입니다.그것은 간단한 데이터 액세스 기술입니다.

다른 팁

귀하의 질문이 맥락을 무시하는 것이라고 생각합니다. DAL과 BLL은 종종 상황에 관한 것입니다. 그것은 한 줄의 코드 (질문 제안)에 관한 것이 아니라 클래스, 네임 스페이스 및 프로젝트의 경로에 대한 프로젝트의 소스 파일에 대한 프로젝트의 경로에 관한 것입니다. 이러한 문제는 좋은 DAL과 BLL을 작성하려는 프로그래머가 무시하고 올바른 도구를 사용하는 경우 문제가 즉시 해결된다고 생각합니다.

위에서 제공 한 코드 줄을 기반으로 몇 가지 예를 들어 내 지점을 분명히합니다.

프로젝트의 소스 코드를 읽고 * .aspx.cs 파일의 코드 행을 발견하면 조금 고민이 될 것입니다. 프로젝트는 n-tier 또는 modular가 아닙니다.

반대로, 내가 원본을 읽고 프로젝트의 DAL 하위 디렉토리에서 dog.cs라는 파일의 코드 행을 발견하면이 코드는 개 객체에 대한 데이터 액세스로서 행동하기위한 것입니다. 해결책.

디렉토리 호출 BLL에있는 것에 비슷한 결론을 그릴 수 있습니다.

내 지점을 이해하지 못하지 마십시오 - 당신이 당신의 솔루션에 디렉토리와 bll이라는 DAL과 BLL이라는 이름을 가지고 있어야합니다.이 요소들을 정의하는 것은 데이터 액세스를 수행합니다. 이러한 코드 라인은 멋지게 설계된 n-tier 시스템에 기여하거나 그것으로부터 손상 될 수 있습니다.

맵핑을 수행하기 위해 추가 코드를 작성하지 않고도 데이터를 개체에 매핑하는 빠르고 쉬운 방법으로 리포지토리 / 데이터 레이어에서 DAPPER를 사용합니다.DTOS를 사용하여 레이어간에 데이터를 전송하거나 별도의 공통 계층에있을 수있는 엔티티 (BOS)로 직접 데이터를 전송할 수 있는지 여부에 따라 귀하에게 달려 있습니다.

그것은 모두 구현하려는 추상화 수준에 따라 다릅니다.엔티티 프레임 워크를 사용하고 LINQ 쿼리를 비즈니스 계층에서 직접 만드는 경우 논리를 EF에 밀착시키고 엔티티가 데이터 및 비즈니스 계층에서도 사용되고 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top