2012-01-10 4 views
4

여러 클라이언트가 서로 다른 사용자 지정 기능을 요구하는 여러 사용자가 사용하는 제품의 경우 사용자 지정 인터페이스와 기능면에서 현명한 코드를 사용하지 않고 이러한 변경 사항을 어떻게 수용합니까?클라이언트 특정 구성을 관리하는 방법

모든 프로그래밍 언어 용 프레임 워크가 있습니까?

UI를 더욱 자세히 추가하려면 웹 기반이며 JSP를 사용하여 작성해야합니다.

+2

config에 대한 언어 불가 지론? 나는 그렇게 생각하지 않는다 ..... –

답변

3

동일한 앱의 여러 버전을 관리하는 것이 가장 까다로운 비즈니스 요구 사항 중 하나이기 때문에 개방형 프레임 워크가 필요하지는 않지만 관련된 각 회사는 자체적으로 sth 용 시스템을 개발합니다. 비즈니스 로직의 변경에 관해서는

, 당신은 강력한 인터페이싱 및 IOC의 (예 : 봄 등)에 대한 혜택을 누릴 것입니다. 특정 사례에 대한 서비스를 무시하고 필요한 방법을 변경 한 다음 수정 된 버전의 서비스를 IoC에 주입합니다.

유연성이 거의없는 JSP를 선택 했으므로 UI는 어렵습니다. Swing 또는 GWT에서 프로그래밍 할 때 UI 수정을 동일한 방식으로 수행하는 것보다 - 필요한 UI 클래스를 재정의하고 변경 한 다음 수정 된 버전을 주입하십시오. JSP를 사용하면 커스터마이징 된 버전에서 .jsp 파일을 수정할 수 있습니다.

이제 변경 수정/버그 수정 - 버전 제어 시스템을 완전히 사용합니다. 물론, 고객 별 버전은 브랜치이며 메인 버전은 트렁크입니다. 트렁크에 버그 수정을 한 다음 고객 별 분기에 병합합니다. 인터프리터/오버라이드 구현에서는 대부분의 병합이 쉬운 방법이지만 JSP를 사용하면 충돌이 자주 발생할 것으로 예상됩니다 ...

일반적으로 코드 변경 사항은 XML 기반의 것보다 쉽게 ​​병합됩니다.

2

간단한 방법에 대해 OOP? 사실적인 인터페이스/기본 클래스를 설정하고 구성에 따라 클라이언트에 따라 하위 클래스 A 또는 B 중 하나를 인스턴스화합니다. 이처럼 언어에 무관심한 질문에 대해 더 자세한 설명을하기는 어렵지만 사실 매우 현실적이라고 생각합니다.

+0

해답을 가져 주셔서 감사합니다. UI 요소는 어떻습니까? –

2

Win32/.NET 환경에서 공통적 인이 문제에 대한 한 가지 해결책은 클라이언트 관련 "코드"를 리소스 파일로 이동하는 것입니다. 많은 .NET 프로젝트 (.NET은 System.Resources 네임 스페이스를 통해이 패턴을 기본적으로 지원합니다)은이 패턴을 국제화, 언어 당 하나의 파일에 배치 한 다음 런타임에 적절한 파일에서 UI 문자열을로드하여 사용합니다.

이 패턴은 JSP 응용 프로그램에 어떻게 적용됩니까? 이제는 클라이언트 당 하나의 리소스 파일 (또는 파일 대신 데이터베이스 사용)을 유지하고 페이지를 제공 할 때마다 리소스 파일에서 사용자 별 사용자 지정을로드 할 수 있습니다.

예를 들어 가장 큰 고객이 사이트의 각 웹 페이지 일부에 로고를 겹쳐서 표시하려고한다고 가정 해 보겠습니다. 페이지가 CustomerLogo 속성을로드하고 페이지의 해당 부분에있는 HTML 이미지의 src 속성으로 사용할 수 있습니다. 중요한 고객에게 페이지를 게재하는 경우 URL "/static/images/importantCustomerLogo.png"을로드하고 그렇지 않으면 URL "/static/images/logo.png를 지정하는 기본 리소스 파일로 폴백합니다 . "

이렇게하면 하나 또는 두 개의 Java 파일에 속성을로드하기위한 코드를 추상화하고 웹 사이트 전체에서 해당 속성을 사용할 수 있습니다. 코드베이스에서 고객 전용 인 유일한 부분은 리소스 파일 세트이며, 읽기 쉽고 수정하기 쉬운 깨끗한 XML 형식 일 수 있습니다. 첫 번째 위치에서 응용 프로그램을 개발하지 않은 사람들은 먼저 코드를 읽지 않아도 XML을 수정할 수 있으므로 리소스 파일을 유지 관리 할 필요가 없으므로 영업 부서에서 해당 작업을 수행 할 수 있습니다.

1

GWT 컴파일러가 실제로 각각의 다른 브라우저를 대상으로 코드의 다른 버전을 생성하는 GWT 응용 프로그램을 컴파일 할 때

deferred binding라는 기능을 통해 상자에서이 작업을 수행합니다. 이는 GWT 구성 요소가 다른 브라우저 세부 정보를 처리하면서 자동으로 수행됩니다.

이 기능은 사용자 지정 속성을 기반으로하는 임의의 제품 컴파일로 확장 될 수 있습니다. 여기에 간단한 예는 다음과 같습니다 (당신이 정상적인하고 DetailedView를 사용하여 NormalView 클래스 다른를 사용하여 하나를 두 개의 서로 다른 버전을 생성하는 모듈 정의를 만들 수 있습니다

public abstract class AbstractView { ....} 
public abstract class NormalView extends AbstractView { ... } 
public abstract class DetailedView extends AbstractView { ....} 

상세보기에 대해 서로 다른 뷰 정의가 있다고 가정 너의 gwt.

AbstractView view = GWT.create(AbstractView.class); 

를 사용하여 XML 파일)

<define-property name="customMode" values="normal,detailed" /> 

<replace-with class="com.example.NormalView"> 
    <when-type-is class="com.example.AbstractView" /> 
    <when-property-is name="customMode" value="normal" /> 
</replace-with> 

<replace-with class="com.example.DetailedView"> 
    <when-type-is class="com.example.AbstractView" /> 
    <when-property-is name="customMode" value="detailed" /> 
</replace-with> 

런타임에 해당 인스턴스를 제공 할 것입니다.

클라이언트 특정 코드를 특정 클래스로 캡슐화하고 다양한 구현을위한 공통 인터페이스를 노출하는 것은 사용자의 책임입니다.

는 또한이 클라이언트는 현재 (이 위해 JSP를 사용할 수 있습니다.) 테스트로


위의 코드 샘플을 채취하지 마십시오보고에 따라 적절한 컴파일 된 버전을 선택해야합니다 구문에 문제가있을 수 있습니다, 그것은 단지 일반적인 생각

를 전달하기위한 것입니다

는 JSP 백엔드 GWT의 앱 호스팅 환경에 이상적인, 당신은 requestfactory 분을 활용할 수있을 것입니다 클라이언트와 서버 간의 쉬운 통신을위한 메커니즘.

여기서 분명히 학습 곡선이 있습니다. IMO official documentation은 시작하기에 좋은 장소입니다.

0

OSGi 관련 기사 (또는 서적)를 읽으려고 시도 할 수도 있습니다 ...이 플랫폼은 모듈성 문제에 대한 매우 실용적인 답변을 제공합니다.이 모듈은 함께 사용하는 다른 모듈을 처리 할 수 ​​있도록 특별히 설계되었습니다. 종속성 및 버전 관리. OSGi 선언적 서비스를 통한 의존성 주입은 동적 기능을 갖춘 Spring의 매우 유용한 대안입니다. 서비스와 참조를 제공하는 번들을 배포하면 자동으로 업데이트되어 삭제되고 새로 고쳐집니다 ... 이 기술을 살펴본 후 몇 가지 질문을하십시오. 감사합니다 제롬

관련 문제