2011-07-06 2 views
1

개발해야하는 새로운 AuthenticatedWebApplication에서 다시 사용해야하는 여러 페이지와 기능을 가진 Wicket AuthenticatedWebApplication이 있습니다.두 개의 다른 위킷 응용 프로그램이 공통 기능을 공유 할 때 코드를 재사용하는 방법은 무엇입니까?

나는 Wicket 1.4, Spring 및 Hibernate를 사용하고있다.

두 응용 프로그램은 이제 기본 페이지에 구현 된 동일한 모양 (응용 프로그램 로고 제외)을 공유합니다.

누구나 비슷한 경험을 했습니까? 공통 기능으로 인해 변경 될 수있는 워크 플로 프로세스가 구현되므로 코드를 복사하여 붙여 넣기를 반복하고 싶지는 않습니다.

애플리케이션을 모듈화하여 목표를 달성하려면 어떻게해야합니까?

+0

응용 프로그램 로고는 변경해야하거나 응용 프로그램 기능의 하위 집합 만 다시 사용 하시겠습니까? 나중에이 부분 집합이 얼마나 큰지 (50 %/10 %/75 %와 같은 대략적인 추정으로 충분합니다). 전자의 경우 동일한 애플리케이션 인스턴스를 공유하고 싶습니까? – Nicktar

+0

@Nicktar 아마도이 하위 집합은 응용 프로그램 기능의 약 80 %입니다. 로고와 메뉴는 두 응용 프로그램간에 확실히 바뀔 것입니다. 인증은 동일해야하며 공유 기능 외에도 각 응용 프로그램은 자체 기능에 고유 한 기능을 갖습니다. – Marcelo

+0

다음 내 대답에 설명 된 솔루션을 작동합니다. 공유 기능을 프로젝트/jar로 컴파일하고 필요한 경우 새 프로젝트의 클래스를 확장/덮어 쓰기 만하면됩니다. – Nicktar

답변

1

우리 회사는 항상 이것을합니다. 우리는 기본 UserApplication, 사용자 계정, 로그인, 인증 등을 보유하는 핵심 패키지를 가지고 있습니다. 그리고 우리가 개발하는 모든 프로젝트는이 기본 패키지를 확장합니다. 몇 가지 중복이 있습니다 (예 : 거의 모든 구성 파일은 각각 동일하게 보이지만, 각자 자신의 theme이라는 마크 업을 제공하고 애플리케이션의 모양과 느낌에 맞게 사용자 정의 된 디렉토리가 있습니다.

제안은 이렇게 같이

  1. 핵심 응용 프로그램은 getXPanel() 방법 각각의 하위 응용 프로그램 오버라이드의 공정한 수 있어야합니다. 예 : getHeaderPanel()
  2. 모두가 확장하는 "BasePage"클래스를 사용하십시오. 여기서 전체적인 모양과 느낌을 설정하고 하위 응용 프로그램 테마 폴더에서 재정의하고 <wicket:extend> 기능을 많이 사용합니다. jQuery import, ec를 넣는 좋은 장소이기도합니다.
  3. 마크 업은 쉽게 재정의됩니다. 하위 응용 프로그램은 로고를 변경하기 위해 페이지의 Java 확장을 작성할 필요가 없습니다. 그냥 다른 마크 업을 사용하십시오.

각 응용 프로그램은 4 개 이상의 모듈로 구분됩니다. 예를 들어 : - 개찰구 의존성, 기본 이벤트

  • 데이터 로깅 -

    1. 기본 UserApplication을 AdminPage는 사용자 obect 최대 절전 모드. 각 페이지에는 자체 마크 업이 있지만 일반적으로 재정의됩니다.
    2. 과학 - 과학 교과서를 표시하기위한 많은 코드가 포함 된 핵심 프로젝트입니다. ScienceApplication extends UserAppication.
    3. 기초 - 초등학생을위한 테마 특정 구현 FoundationsApplication extends ScienceApplication
    4. 질문 - 우리 두 과학 응용 프로그램을 다른 헤더, 심지어 몇 가지 다른 페이지가 InquiryApplication extends ScienceApplication

    고등학교 학생을위한 다른 테마 특정 구현하지만, ScienceApplication 위에서 설명한 방법이 있습니다.

  • +0

    첫 번째 목록에서 (2) + (3)과 관련하여 - 코드와 별도로 페이지 마크 업을 구성하고 있습니까? – ireddick

    +0

    @ireddick 예; 우리는 마크 업, 이미지, CSS 등을 위해 별도의 '테마'폴더를 사용합니다. 우리는 백엔드와 프론트 엔드 작업을 분리하므로, 그것도 도움이됩니다. – jbrookover

    1

    이것은 구성 요소 기반 프레임 워크의 주요 지점입니다. 공통 코드 (구성 요소, 동작, 기본 클래스를 세션, 응용 프로그램, ...)로 별도의 Java 프로젝트 (.jar)에 넣습니다. 나중에이 특정 프로젝트의 .war 프로젝트 (WEB-INF/lib에 .jar 넣기)에 의존합니다. 빌라!

    +0

    어떻게 서로 다른 로고로 기본 페이지를 공유 할 수 있습니까? 두 개의 서로 다른 로그인을 가지고 어떻게 역할 기반 권한을 사용할 수 있습니까? – Marcelo

    0

    질문에 대한 귀하의 주요 관심사는 페이지에 관한 것 같습니다. 그렇다면 이것은 제 제안입니다. 먼저, 한 응용 프로그램에서 다른 응용 프로그램으로 변경할 수있는 페이지 부분을 지정해야합니다. 그런 다음이 파트의 데이터를 가져와 템플릿을 가져와야합니다. 이제는 데이터를 저장하는 방법 (예 : XML 파일, DB)을 결정해야합니다 (요구 사항에 따라 결정). 이제 필요에 따라 온라인 또는 오프라인 템플릿에서 페이지를 컴파일 할 수 있습니다.

    1

    다른 의견에 대한 답변에서 판단 :

    1. 응용 프로그램을 리팩토링과 (추상) 기본 클래스에 모두 공통 코드를 밀어 넣습니다.
    2. 새 프로젝트로 옮기고 2 개의 새 응용 프로그램 프로젝트의 BuildPath를 기본 패키지가 필요하도록 설정하십시오.
    3. 변경하는 기능을 구현하기 위해 기본 클래스를 확장하십시오.

    현재 구현에 따라 두 개의 다른 이미지 리소스를 구현하거나 새 프로젝트의 다른 모델을 기본베이스 페이지로 제공하여 로고를 변경할 수 있습니다. 또는 이미지 URL을 속성에 넣고 다른 속성 파일을 제공 할 수 있습니다. 귀하의 응용 프로그램. 데이터베이스 나 테이블에도 똑같이 적용됩니다 ... 예를 들어 JPA를 사용하면 모든 글로벌 사용 엔티티를 기반으로 푸시하고 다른 테이블 이름을 사용하여 두 개의 다른 사용자 엔티티를 구현할 수 있습니다. 코드 중복을 줄이기 위해 공유 추상 baseUser-entity를 사용할 수도 있습니다.

    관련 문제