실용적인 접근 방식을 채택하겠습니다. 역사적으로 비즈니스 로직을 저장된 프로세스에 유지하는 주요 이점은 성능상의 이유로 (2.5 계층 아키텍처), 비즈니스 로직을 BLL 계층 (3 / N 계층)으로 분리하는 것이 일반적으로 유지 관리 관점 및 테스트 용이 (데이터 액세스를 모의 / 스텁 아웃).
그러나 LINQ2SQL, EF 및 NHibernate와 같은 LINQ 지원 .NET ORMS가 이제 매개 변수화 된 SQL 쿼리를 생성하므로 쿼리 계획을 캐시하고 SQL 주입을 위해 이스케이프 처리하는 등 3 / N 계층 아키텍처로의 전환은 그 어느 때보 다 강력 해졌으며 대부분의 SPROC (특히 쿼리 중심)는 피할 수 있습니다. .NET의 리포지토리 패턴은 일반적으로 IQueryable / accept Expression 트리 매개 변수를 노출하므로 형식에 안전하면서도 유연한 테이블 액세스가 가능합니다. (개인적으로 SOA 유형 아키텍처에서는 BLL 이외의 IQueryable을 공개하지 않을 것입니다. 즉, 서비스 및 프리젠 테이션 계층이 잘 정의 된 메소드 세트와 함께 작동해야합니다. 그렇지 않으면 시스템을 완전히 테스트 할 수 없기 때문에 '
그러나 적절한 크기의 시스템에서는 성능상의 이유로 실제로 데이터 집약적 코드 조각을 여전히 Stored Proc로 작성해야하는 몇 가지 예외가 있습니다. 이 경우 SPROC를 유지하고 ORM을 통해 SPROC를 공개하지만 여전히 함수를 BLL에서 통과 메소드로 공개합니다.