현재 프리젠 테이션 레이어에 Oracle ADF Faces JSF 구현을 사용하는 레거시 시스템에서 작업하고 있습니다. 시스템은 규칙 엔진을 사용하여 사용자와의 상호 작용이나 입력 된 값에 따라 특정 양식 요소가 필수, 사용 불가능 또는 강조 표시되도록합니다.기능 추가 : 서브 클래스 대 데코레이터
현재 응용 프로그램이 "작동 중"입니다. 규칙 엔진과 프론트 엔드 업데이트를 처리하는 현재의 구현은 매우 우아하지 않고의 큰 집합으로 구성 유사 if 문 :
if(screenObj instanceof CoreInputText) {
((CoreInputText) screenObj).setDisabled(true);
}
우리는 또한 우리 자신의 객체가 있으므로 혼합이 믹스를 복잡하게
((CommonAncestor) screenObj).setDisabled(true);
문제는이 깨끗하고 명확하게하기 위해 코드의이 부분을 재 작업 가치가있을 것입니다 여부입니다 : 따라서 같은 일을하고 우리의 옵션을 제거 공통 조상을 공유하지 않습니다 전체로 설정합니다. 대부분의 화면 요소가 ADF Faces 요소이기 때문에 추가 방법을 추가하기 위해 조상을 변경할 수 없습니다.
코드 변경의 목표는 두 가지입니다. 이전 코드를 정리하고 새 요소 또는 컨트롤을 추가해도 큰 코드 변경이 발생하지 않도록 코드베이스를 개선하십시오 (특히 존재하는 if 문 수많은 장소에서).
그래서 우리가 찾고있는 것을 달성하기위한 더 나은 선택이 될이 변화를 계속한다면? 모든 요소를 서브 클래 싱 (기존의 다른 컨트롤을 사용할 때마다 새 클래스가 필요함)하거나 데코레이터 패턴을 구현합니까? 데코레이터에 대한 유일한 관심사는 여전히 각 추가 요소에 대한 코드 변경이 필요하다는 것입니다. 이 두 블록을 포함하는 여러 메소드가 업데이트 할 필요가 없으므로 두 옵션 모두 코드 변경을 줄이는 것처럼 보입니다.
서브 클래 싱 및 데코레이터 이외의 상황을 처리하는 메소드에 대한 모든 입력을 환영합니다!
내가 언급했음을 유감스럽게 생각합니다. 아니 그들은 공통된 방법이 없습니다. 나는 둘 다 새로운 방법을 추가하기를 바랬다. 하이라이트 (boolean)와 같은 것으로, 많은 속성을 설정합니다. – doomspork