2010-04-13 5 views
3

응용 프로그램을 시작하는 방법에 대한 리팩토링 작업을 수행해야하는 임무가 있습니다. 기본적으로 GUI 응용 프로그램 시작 코드에 의존하는 콘솔 응용 프로그램이 많아서 우리가 제공해야하는 라이브러리에 대한 킥오프 효과가있는 위조 종속성과 다른 모듈이 선언해야하는 종속성이 있습니다.PicoContainer 시작 순서 제어

그래서 기본적으로 일련의 Runnable 객체를 목록에 던져 순서대로 실행하는 간단한 시작 프레임 워크를 작성했습니다.

하지만 생각 - 그들이 시작됩니다 시작 가능한 구현하는 경우

... 우리는 이미 우리의 프로젝트에 PicoContainer, 그래서 시작시에 실행해야 할 모든 것을 잠재적으로 PicoContainer에 던져 질 수 있고,

그러나 어떤 경우에는 그들 사이의 순서를 지정하고자합니다. 예를 들어, 응용 프로그램이 시작되고 있음을 나타내는 헤더를 로그에 기록하기 전에 로그에 다른 구성 요소를 쓰는 것을 원하지 않습니다. 주입 의존성을 도입하여 순서를 도입 할 수 있다는 것을 알고 있지만이 경우 해킹과 같은 느낌이 듭니다. 로그 헤더 작성자를 로그에 쓸 수있는 다른 모든 구성 요소에 대한 종속성으로 추가해야합니다. 모든.

그럼에도 불구하고 PicoContainer 시작 순서를 제어하는 ​​것이 좋을 것 같습니다. 그래서 다른 방법이 있습니까?

또는 간단하게 유지하고 Runnable의 내 목록에 충실 할 수 있습니다. 그것은 결국, 작동합니다.

답변

0

현재 구성 요소가 로그에 어떻게 기록합니까? 거기에 로그에 대한 (picocontainer) 종속성이있을 것으로 기대하고 그 로그의 생성자는 헤더를 작성합니다. 로깅이 주입되지 않고 완전히 PicoContainer를 우회하는 경우, 헤더 부분 만 가져 오지 않을 것이고 나머지 로깅과 마찬가지로 그 부분은 계속 유지할 것입니다.

+0

사실 로거에 시작 헤더를 쓰는 구성 요소는 로거 자체와는 별개의 구성 요소입니다 (단일 책임 원칙 및 그 모든 것). – Trejkaz

2

기본 시작/중지 순서는 제어 할 수 없지만 반드시 자신의 수명주기를 주문할 수는 있습니다.

예 :

1)하게하여 인터페이스 MyStartable 갖는 메소드 init를()와 대등 연장.

2) 컨테이너 구성 요소 MyStart를 MyStartable의 목록 또는 배열로 초기화합니다.

3) 수동으로 또는 표준 시작으로 MyStart를 시작합니다/당신이 오버라이드 (override) 할 필요가 있음을 자연 순서에 따라 목록/배열을 정렬 MyStart의 라이프 사이클

4)를 중지합니다.

5) 나는 수명주기 관리자를 통해이 작업을 수행하기 위해 더 "기본"방법이 추측하지만, 소스를 탐구 할 필요가 모든 MyStartable

에 초기화()를 호출합니다.