2017-05-11 4 views
0

나는 조직 내의 다른 부서에서 사용자 정의 된 사용을 허용하도록 확장하기 위해 노력하고있는 대규모 응용 프로그램이 있습니다.런타임에 사용중인 패키지를 변경할 수 있습니까?

각 부서는 서로 다른 요구를 가지고 있지만 동일한 클래스를 일부 공유 할 수 있지만 다른 요구 사항을 충족시키기 위해 다른 부서를 수정해야합니다.

내가 원하는 일은 각 부서의 새 패키지를 만들고 관련 패키지를 해당 패키지 아래로 이동시켜 분리 된 상태로 유지하지만 모두 동일한 전체 애플리케이션에 포함되도록하려는 것입니다.

는 지금, 내 패키지 구조는 다음과 유사합니다 내가 바라고 무엇

[src] 
    - Main.java 
    [view] 
     - D1 FXMLs 
    [controllers] 
     - D1 Controllers 
    [model] 
     -D1 Classes 

가 구조 조정을 추가 부서, 많은 D1과 동일한 클래스 이름을 사용하여 (부서 1)를 포함하는 프로젝트입니다.

[src] 
    - Main.java 
    [D1] 
     [view] 
      - D1 FXMLs 
     [controllers] 
      - D1 Controllers 
     [model] 
      -D1 Classes 
    [D2] 
     [view] 
      - D2 FXMLs 
     [controllers] 
      - D2 Controllers 
     [model] 
      - D2 Classes 
...etc 

내가 필요 내 Main.java (가) 실행시 변수의 값에 따라, 밖으로 작동하는 패키지를 결정합니다.

이 경우에도 가능합니까? 아니면 각 부서에 대해 완전히 별도의 프로젝트를 만들고 "로더"프로그램에서 실행할 프로젝트를 결정해야합니까?

편집 : 아마 내가 직접 답을 찾았습니다. Main.java에 D1 또는 D2 패키지 내의 클래스를 호출하고 클래스가 앞으로 패키지를 올바르게 할당하도록 할 수 있습니까?

+0

공장 패턴 (특히 추상 공장 패턴)을 읽습니다. –

+1

JDK의 예제는 URL 스트림 처리를위한 팩토리입니다. 여기에서 구현을 찾을 수 있습니다 : [Factory implements URLStreamHandlerFactory] (http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b27/sun/misc/Launcher.java#Launcher) .공장). 이 예제는 리플렉션을 사용합니다. 리플렉션은 사용하고 싶지 않을 수도 있습니다. 하드 코딩 된 부서 이름 목록은 컴파일 타임에 미리 이름을 알고있는 경우에도 작동합니다. 반영은 런타임에 동적 구현 선택을 허용하는 것입니다. – jewelsea

답변

0

아마도 가장 우아한 해결책은 아니지만 간단한 접근 방식을 사용했습니다. (필자가 공장을 이해하는 지점까지 아직까지는 기술이 없습니다.)

나는 단지 내 질문에 대한 편집 내용을 구현하고 어떤 패키지가 필요한지에 따라 다른 패키지의 RootLayoutController을 호출했습니다.