내 마지막 question about fine-tuning에 대한 모든 답이 예상 한 것보다 더 유용하다는 것이 밝혀진 후에도 MembershipProviders에 대한 또 다른 비슷한 질문을 할 것이라고 생각했습니다.회원 공급자를 미세 조정하는 방법은 무엇입니까?
좋아요, 우선, 명확히하기 : 회원 자격, 역할 및 프로필 제공 업체가 무엇인지, 내 자신을 구현하는 방법, 구성 방법 및 구성 방법 및 대부분의 사항을 알고 있습니다.
역할 및 프로필 공급자를 구현하는 것은 대부분 간단한 CRUD 만 필요하기 때문에 매우 간단합니다. LINQ의 한 줄로 RoleProvider의 메서드 중 절반 정도는 충분합니다.
그러나 회원 공급자는 다른 짐승입니다. 많은 사람들이 SR (Single Responsibility) 원칙에 위배된다는 것을 깨닫게 될 것입니다. 왜냐하면 그것은 사용자 관리와 관련된 모든 것을해야하기 때문입니다. 이것은 커스터마이징을위한 많은 공간을 남겨 두지 만, 단점도 가지고 있습니다. 인터넷에 예외 상황을 던지거나 단순히 null을 반환해야 할 때와 같이 예상되는 동작이 무엇인지에 대한 정보는 없습니다.
참고로 this sample implementation을 사용하지만 몇 가지 모순이 있습니다.
- 예를 들어, 자체 ValidateUser 메서드를 사용하여 ChangePassword 메서드의 자격 증명을 확인합니다. 그러나 ValidateUser는 또한 사용자의 LastLoginDate를 현재 날짜로 업데이트합니다. 그래서 프레임 워크는 필자 자신의 공급자에서도이 프레임 워크를 설정할 것을 기대합니까? 아니면 단순히 샘플에서 실수입니까?
- 다른 하나는 ChangePassword 메서드가 새 암호의 유효성을 검사 할 때마다 예외를 throw하지만 CreateUser는 예외를 throw하지 않고 단순히 false를 반환한다는 것입니다.
마지막으로 사용자의 유효하지 않은 암호 시도 횟수를 계산하고 임계 값을 초과하면 잠급니다. 이것은 좋은 일이지만 사용자 잠금을 해제하려면 수동 조치가 필요합니다. 일정 시간이 지난 후에 공급자가 자동으로 사용자의 잠금을 해제하면 문제가 발생합니까?
(EDIT) 거의 잊어 버렸습니다. 샘플의 CreateUser 메소드는 method 매개 변수에서 ID를 삽입합니다. 실제로 자동 인서트를 ID로 사용하기 때문에 이것이 나쁜 습관이라고 생각합니다. 따라서 일부 메소드 매개 변수에서 자동 인서트를 삽입하는 것은 옵션이 아닙니다. 매개 변수를 그냥 무시해야합니까, 아니면 매개 변수의 값이 null이어야하고 그렇지 않으면 예외를 throw해야합니까?
전체적으로 ASP.NET에는 MembershipProvider의 동작에 대한 가정이 있습니까?
예외를 throw해야하는시기 또는 null을 반환해야하는 경우를 설명하는 문서가 있습니까?
예상되는 동작에 대한 지침을 제공하는 일반적인 단위 테스트 집합도 찾으려고했지만 행운은 없었습니다. "단위 테스트가 좋음"및 "단위 테스트 방법에 대한 기사가 많이 있습니다." "하지만 실제 테스트가있는 곳은 아닙니다.
미리 감사드립니다.
+1. 귀하의 답변에 감사드립니다. 그러나 가장 중요한 부분은 생략했습니다. 어느 메소드에서 예외를 던져야하며, 단지 거짓 (또는 null, 해당되는 경우)을 반환해야합니까? – Venemo
@ 베네모 - 주관적인 안내뿐만 아니라 요구하는 '공식적인'지침을 제공하는 답변을 업데이트했습니다. –
대단히 고마워,이게 내가 찾고 있었던 바로 그거야. :) 나는 MSDN이 그런 결정적인 가이드를 가지고 있다는 것을 몰랐다. (아, 괜찮 으면 블로그에 연락하겠습니다.) – Venemo