2013-05-08 2 views
0

내 응용 프로그램 (C#)에서 사용자 인증 및 관리를 지원하는 모듈을 설계하려고합니다. 이 모듈은 다른 개발자가 "제 3 자"구성 요소로 사용해야하므로 인프라 작업용 DLL의 일부로 제공되어야합니다. 요점은 여기서 UI (사용자 권한 및 세션에 따라 다름)를 담당하지는 않지만 작업 할 인프라 만 제공한다는 것입니다.속성 캐싱 및 업데이트

그래서 로그인, 로그 아웃 및 몇 가지 더 많은 기능과 이벤트와 같은 작업을 허용하는 UserManager 싱글 톤 클래스를 만들었습니다. UserManager 클래스는 CurrentUser이라는 속성이 보유하고 있으며이 유형은 ApplicationUser입니다.

ApplicationUser은 사용자 세부 정보 (예 : 전체 이름, 사용자 이름 등)로 만든 클래스이며 IsEligibleFor(Permission) 기능을 제공합니다.

사용자가 UserManager 인스턴스를 얻고 CurrentUser 속성을 통해 현재 로그온 한 사용자와 통신하기를 원합니다. 이상적인 방법은 로그 아웃 작업이 호출 될 때 CurrentUser을 무효화하고 사용자가 로그온 할 때마다 ApplicationUser을 새로 만드는 것입니다. 그러나 이러한 클래스의 사용자가 ApplicationUser의 인스턴스를 캐싱 할 수 있고 변경 사항을 알 수 없으므로 이는 문제가됩니다.

이 이유는 내가 개체가 여전히 유효한지 여부를 나타내는 ApplicationUser 개체의 플래그가있는 솔루션으로 이동하려고 생각하는 이유입니다. 그러나 이것은 내가 좋아하지 않는 ApplicationUser의 각 메소드에서 유효성을 검사해야합니다.

제가 여기에 실종 된 해결책이나 패턴이 있는지 궁금합니다.

답변

0

Observer pattern과 같은 소리가 나옵니다. 클래스는 UserManager 클래스를 관찰 한 다음 변경이있을 때마다 계속 알립니다.

그들은 특정 변경 사항을 수신 할 수 있으므로 시나리오에서 ApplicationUser 개체가 변경 될 때 수신 대기하고 이전 복사본을 삭제하고 새 복사본을 캐싱 할 수 있습니다.

구현 측면에서 .NET을 사용하면 이벤트를 사용하여 쉽게 구현할 수 있습니다.

+0

이 "솔루션"은 (실제로 사용자가 로고 아웃 이벤트에 가입하도록합니다.)하지만 여전히 사용자로부터 다시 캐싱해야 할 책임이있는 솔루션을 찾고 있습니다. 귀하의 솔루션과 함께, 나는 CurrentUser를 null로 설정 하겠지만, 사용자는 이전 버전이 아니라는 사실을 알지 못하면서도 이전 버전을 망칠 수 있습니다. –

+0

사용자를 캐시하는 것이 청취자의 책임입니까? 새 사용자를 이벤트와 함께 보낼 수 있으며 리스너는 기본적으로 캐시 된 사용자 객체를 이벤트와 함께 전송 된 객체로 바꿉니다. "* 솔루션을 사용하면 CurrentUser를 null로 설정 하겠지만 사용자는 여전히 이전 복사본을 엉망으로 만들 수 있습니다 *"- 이전 복사본을 새 복사본으로 교체했을 때와 마찬가지입니다. 현재 설정이 어떤 것인지 오해하고 있습니다. 예를 들어 질문을 업데이트하는 것이 좋습니다. – James

+0

사용자가이 클래스를 사용하기를 원할 경우 다시 캐싱 문제에 대해 걱정할 필요가 없습니다. 내가 누락 된 메커니즘이 없는지 확인하고 싶습니다. 감사합니다 :) –