2009-11-19 3 views
2

질문 : 성능 및 디자인. 문제의 핵심은 다음과 같습니다. RunWithElevatedPriviledges를 일련의 메서드를 중심으로 감싸서 사용해야합니까 (호출은 잘못된 레이어에 있습니다), 나중에 적절하게 호출해야합니다.다층 디자인의 SPSecurity.RunWithElevatedPriviledges에 대한 디자인 질문

처음에는 2 계층 (프런트 엔드 & 데이터베이스) 인 리팩터링 코드입니다.

는 지금 4 층

  • 프런트 엔드 (셰어)
  • 서비스 레이어
  • 데이터 액세스 레이어
  • 데이터베이스

에이를 분할 한 자, 규정 된 설정으로 인해 SQL Server 쿼리를 중심으로 RunWithElevatedPriviledges를 던져서 앱 풀이 데이터베이스에 대해 인증 할 수있게해야합니다. se (제발 나쁜 생각인데, 이것이 끔찍한 생각이지만 제 전화가 아님을 알리는 의견을 게시 해주십시오).

데이터 호출마다 상승 된 권한을 가져야합니다. 내 마음을 들어, 이것은 서비스 레이어에서 발생해야합니다. FE는이 요구 사항에 대한 단서가 없어야하며 데이터 액세스 계층에서도 이러한 요구 사항에 대한 단서가 없어야합니다. 그러나, 서비스 계층은 드롭 다운

userlistbox.datasource = MyService.GetUsers(); //Returns an iEnumerable object 
citylistbox.datasource = MyService.GetCities(currentRegion); //Returns an iEnumerable object 

unrefactored 버전은 상승 된 권한으로 이러한 호출을 모두 랩 시리즈를 채우기 위해 여러 번 호출된다. 내 감각은 서비스 계층으로 밀어 넣는 것이 약간 성능이 떨어지지 만 더 나은 디자인이라는 것입니다.

생각하십니까? 그리고 제발, 아무 것도 할 수없는 제약을 강타하지 마세요.

답변

1

프런트 엔드보다 서비스 계층이 더 좋습니다. 어쩌면 SPSecurity.CodeToRunElevated Delegate를 통과 할 수 있습니까? 나는 내 프런트 엔드가 상승 된 권한에 대해 알고 있듯이 내 경우에 도움이 될 것입니다 대리자를 통과 믿을 수 없어하지만, 서비스 계층 :

http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spsecurity.codetorunelevated.aspx

+0

나는 다시 동의하는 경향이 있어요. 내가 할 수있는 일은 내 제어 서비스를 전달하는 것입니다. 즉 Service.PopulateUsersListBox (userListBox); 하지만 프런트 엔드에 대해 알 필요가 있습니다. ARG! –

+0

어쩌면로드 타임에 서비스의 레이어를 동적으로 페이지의 컨트롤에 "등록"할 수 있습니까? – IrishChieftain

+0

기술적으로는 문제가되지 않습니다. 나는 그것이 좋은 생각인지 여부로 고민하고있다. 아마도 UserList는 UserListBox가 캡슐화 된 도메인 객체 여야합니다. 실질적으로 인스턴스가 (예 : UserListBox.Data = new UserList())입니다. 또한 집계 된 메서드는 PopulateForm() { Service.PopulateData (UserListBox.Data, CityListBox.데이터 등)) UserListBox.Update(); CityListBox.Update(); } 더 많은 코드가 필요하지만 ... 조금 더 깔끔하게 느껴진다. –