2009-06-09 8 views
9

속성 변경 관찰자 패턴을 지원하는 some people 작성 빈을 발견했습니다.웹 응용 프로그램의 Java bean에 PropertyChangeSupport 및 PropertyChangeListener에 대한 지원을 추가해야합니까?

그러나 관찰자 패턴은 웹 기반의 MVC 패턴에서 일반적으로 사용되지 않는 것을 기억합니다. 웹 응용 프로그램의 상태를 알 수없는 특성 때문입니다.

웹 응용 프로그램 Java beans에서 위의 패턴을 따르는 것이 좋습니다.

답변

10

실제로 기능을 필요로하는 경우에만 솔직하게 말하십시오. 대부분의 웹 응용 프로그램에는 PropertyChangeSupport이 필요하지 않습니다. 내가 본 모든 웹 앱에서 사용되는 것을 실제로 기억할 수는 없습니다. Swing 응용 프로그램에서만 사용되는 것을 보았습니다.

웹 응용 프로그램의 일반적인 bean은 매우 짧은 수명의 개체이며 단일 요청을 처리하고 비어있는 곳으로 캐스팅되어 가비지 수집됩니다. 주요 문제는 웹 애플리케이션이 자연스러운 동시성 및 다중 사용자이기 때문에 리스너 및 이벤트 등을 통해 더 오래 살아있는 객체에 자체적으로 빌려주지 않는다는 것입니다.

+2

그래, 당신이 나열한 모든 것들과 웹 어플리케이션의 무국적 특성 때문에 나는이 영역에서 관찰자 패턴이 쓸모 없다고 생각하게 만든다. –

+0

당신은 완전히 옳았 습니다만, 나는 정상적인 수정 시나리오에 관해서 당신의 제안을 원합니다. 30 ~ 50 개의 홀수 필드가 수정을 위해 열리고 사용자가 2 개의 필드를 변경했지만 실제로 수정되지 않은 모든 필드가 업데이트됩니다. 내 점수는 ..? – Logicalj

+0

새 질문을 할 필요가있는 것 같습니다.여기에 링크를 붙이면 알림을받을 수 있습니다. –

3

PropertyChangeListener은 어쨌든 가난한 디자인입니다. . ChangeListener (또는 이와 유사한 모델)을 사용하는 단순한 모델을 사용하는 것이 훨씬 더 좋습니다.

대화 형 및 COMETY 작업을 수행하지 않는 한 웹 응용 프로그램에서 큰 의미를 갖지 않습니다. 일반적으로 모든 현재 정보가 한 번에 번들로 묶인 견인 모델이 있습니다. 캐시를 가지고있는 곳에서 말이 될 수 있습니다.

웹 응용 프로그램과 동일한 방식으로 데스크톱 응용 프로그램을 작성할 수도 있습니다. 모든 변경 (또는 일련의 변경) 및 GUI 동기화. 이것은 꽤 컴팩트 한 것으로 밝혀졌습니다. 또한 성능 비용은 주요 변경 사항의 중요 시점 (예 : 창 열기)에서 이동하여 구울주기가있는 중요하지 않은 시간에 분산됩니다.

3

1) 필요한 경우를 제외하고는 속성 변경 지원을 추가하지 마십시오.

2) 빈이 getters/setters/equals/hashcode보다 훨씬 많은 값 객체 인 경우 속성 변경 이벤트를 구현하는 데 사용되는 조언으로 객체를 래핑하기 위해 AOP 프레임 워크를 사용하는 것을 고려해보십시오. /지원하다. 이렇게하면 특정 컨텍스트 (대개 UI)에서만 필요하고 다른 컨텍스트에서 변경 될 수있는 논리로 빈이 유지됩니다. 이것은 특정 앱에 대한 모든 도메인 빈에 속성 변경 지원을 추가했을 때 배웠던 교훈입니다. UI는 그것을 사용했지만 서버 팀 (사용되지 않음)을 혼란 시켰고 사용되지 않은 부분의 노이즈였습니다.

개인 속성을 청취 할 필요가없는 경우도 있습니다. 개체의이 변경된 것으로 알면 충분합니다.

+0

AOP 프레임 워크가 좋은 대안입니다. 감사. –