2008-09-26 6 views
3

최근 프로젝트에서 웹/서비스 레이어의 상호 작용 최상위 레이어가 XXXManager 클래스를 사용하는 아키텍처를 거의 완성했습니다.관리자 클래스

예를 들어 여러 가지 다양한 데이터 원본의 데이터를 시스템으로 가져 오는 일정에 따라 실행되는 Windows 서비스가 있습니다. 이 서비스 내에서 여러 개의 "Manager"클래스 즉, CPImportScheduleManager, CPImportProcessManager 등이 호출됩니다.

이제 이러한 관리자 클래스는 웹/서비스 계층에서 사용하기 위해 체인을 통해 메소드를 전달하는 것 이상의 기능을 수행합니다. 예를 들어 내 UserManager.Register() 메서드는 하위 수준의 어셈블리를 통해 사용자를 지속시키지 않고 WAP 푸시를 사용자에게 보내고 사용되는 모바일 핸드셋을 결정합니다.

아키텍처의 유형 I OOP를 절차 적 모델에 적합하게 만드는 일반적인 방법. 나는 그들의 요점을 볼 수 있지만, 내가 궁금해하는 것은 웹/서비스 계층이 단순히 코드를 재 작성할 필요없이 동일한 공통 메소드를 호출 할 수있는 클래스의 최상위 레벨 세트이다. 따라서 어떤 시점에서 사용자를 등록한 웹 서비스를 작성하려면 다시 모든 논리를 다시 작성하지 않고 UserManager.Register() 메서드를 다시 호출하면됩니다.

나는 자신을 설명하기 가장 좋은 사람이 아니었지만, 내 말투가 의미가있는 경우 귀하의 대안에 대해 조언을 주시기 바랍니다.

Cheers, Chris.

답변

7

관리자는 주어진 엔티티 집합에 대한 워크 플로 또는 복잡한 작업을 처리하는 서비스에 일반적으로 많이 사용되는 명명 전략입니다. 그러나 그것이 일을 끝내면, 반드시 나쁜 것은 아닙니다.

내가 가진 중요한 질문은 관리자 아래에 무슨 일이 일어나고있는 것입니까? 사용자 등록과 같은 프로세스의 워크 플로를 단순히 조정하는 경우 다른 이름을 가진 컨트롤러 (MVC)입니다. 그러나 많은 비즈니스 로직을 포함하고 있다면 (엔터티 또는 엔티티 집합의 상태에 따라 조건부 로직을 의미 함),이 논리를 명시 적으로 만들 수 있는지주의 깊게 살펴볼 것입니다. 자신의 수업을 듣거나 적절한 책임을 가지고 수업으로 옮깁니다.

업데이트 : 소리를 통해 일반적으로 올바른 아이디어를 얻었습니다. WebService, Webform 등에서 사용되는지 여부를 신경 쓰지 않는 비즈니스 프로세스의 조정을 처리하는 클래스 세트가 있습니다. 그런 다음 위에 WebService 레이어를 추가하고 이러한 클래스를 활용하고자한다고 말하고 있습니다. 이것은 좋은 것 (tm)입니다.

0

디자인에 대한 동기가 좋아요. 코드 재사용이 좋습니다. 어떤면에서 동기 부여는 Martin Fowler's Service Layer과 유사합니다. 그러나 이러한 관리자 클래스에 너무 많은 책임이있을 수 있습니다. 아마도 도메인 우려 (사용자 등록)에서 인프라 관련 문제 (WAP 푸시, 사용자 지속성)를 분리 할 수 ​​있습니다. 이 Separation of Concerns은 재사용 성을 더욱 증가시키고 유지 보수성을 향상시킵니다.