2010-08-23 4 views
2

안녕하세요. 비즈니스 로직 계층에 세션 값을 전달해야하지만 프리젠 테이션 계층에서 함수에 전달할 수 있지만 비즈니스 로직 계층에서 직접 액세스 할 수 있습니까? 또한 그것은 내가 아니라 비즈니스 로직 계층 내에서 Session에 액세스하는 것이 좋습니다비즈니스 로직 계층에서 세션 값을 가져 오는 방법은 무엇입니까?

GetMyRecords(Count,Session["userID"].toString()); ? 

답변

3

위의 John의 답변에 따르면 비즈니스 계층의 모든 UI 요소에 액세스하지 않는 것이 이상적입니다. 프레젠테이션 계층의 세션 값을 비즈니스 계층으로 전달하여 비즈니스 계층이 자신이 어디서 오는지가 아닌 값만 인식하도록해야합니다.

프레 젠 테이션 레이어 에서 값을 전달하는 방법에 대한 두 번째 요점은 atleast 세션 [ "userID"]. toString()을 프리젠 테이션 레이어의 속성으로 배치해야합니다. 속성이기 때문에 필요한 경우 확인/유효성 검사 논리를 추가 할 수 있습니다.

또한 나는 래퍼 SessionWrapper 클래스를 가지고 있으며 세션 값에 액세스하기 위해 응용 프로그램에서이 클래스를 사용하는 것이 더 깔끔하다는 것을 알았다. 이것의 장점은 Session Persistence가 변경되면 대개 한 곳이 변경된다는 것입니다. 물론 .NET 공급자가 자신의 공급자를 만들었더라도 구성을 통해 플러그 인 할 수 있으므로 필요하지 않습니다.

+0

제정신에 감사드립니다. 세션 변수를 반환하는 비즈니스 로직 계층 외부의 저장소 클래스를 만들었습니다. 엄지 위로! –

2

같은 비즈니스 로직 계층에 직접 전달하는 좋은 방법입니다. 별도의 레이어를 사용하려는 의도는 서로 다른 용도로 사용된다는 것입니다. 예를 들어 비즈니스 로직 계층은 일반적으로 사용자 인터페이스 기술에 대한 참조를 포함해서는 안됩니다. 이 경우 Session.

프리젠 테이션 레이어 (UI 레이어라고도 함)에서 비즈니스 레이어가 프리젠 테이션 레이어에서 수행해야하는 작업으로의 변환입니다. 누가 알아? 아마도 다음주에 상사가 비즈니스 로직을 해당 웹 서버에서 애플리케이션 서버로 옮기고 WCF 기반 통신을 사용하도록 요청할 것입니다.

명확한 분리는 내일의 모양을 모르는 경우에도 더 많은 경로를 내일까지 열어 둡니다.

+0

존 감사합니다. 당신은 층 분리에 관해 집중하고 있습니다. 저장소 클래스를 통해 어떻게 액세스 할 수 있습니까? –

+0

'세션'에서 제공하고자하는 정보가 더 많은 것 같습니다. 예를 들어 세션에 customerID가있는 경우 프레젠테이션 계층에서 추출한 다음 매개 변수로 비즈니스 논리 계층에 전달할 수 있습니다. 리포지토리 클래스에 관해서는 일반적으로 비즈니스 로직 계층 내에서 데이터 액세스 계층에 대한 인터페이스로만 사용합니다. 그 시나리오에서, 저장소 클래스는 표현 계층으로부터 2 층 떨어져있을 것이다. – Manfred

관련 문제