Java 앱에서 MVC 사용


10

여러 스레드에서 처리하고 상당히 많은 양의 데이터를 시각화하려면 크로스 플랫폼 GUI 응용 프로그램을 작성해야합니다. 이상적으로 응용 프로그램은 비교적 빠르며 좋아야합니다.

앱의 인터페이스는 테이블 위젯, 트리 위젯 및 사용자 정의 그림 그리기 위젯으로 구성됩니다. 사용자는 이러한 위젯 중 하나에서 데이터를 수정할 수 있으며 변경 사항은 다른 위젯에 즉시 반영되어야합니다.

당연히 MVC를 사용할 계획입니다. 그러나 일반적으로 C ++ / Qt에서 모든 GUI 프로그래밍을 수행하며 Java에 대한 노출은 매우 제한적입니다. 따라서 Java로 그러한 응용 프로그램을 구성하는 방법에 대한 조언을 보내 주셔서 감사합니다. 특히 Swing 또는 JavaFX를 사용해야합니까? 직업에 어떤 위젯을 선택 하시겠습니까? Java 플랫폼의 이러한 측면을 다루는 서적 / 온라인 학습서를 추천 할 수 있습니까?

의견을 보내 주셔서 감사합니다. 감사!

(이 질문은 원래 Stack Overflow에 게시 되었지만이 사이트는 더 적절한 장소로 제안되었습니다)

답변:


21

다양한 기술이 귀하의 요구를 충족시킬 수 있기 때문에 이것은 매우 주관적입니다.

다른 사람들과 마찬가지로, 나는 개인적으로 그러한 프로젝트에 개인적으로 선호하는 기술, 즉 JavaFX 일 것 입니다.

JavaFX를 권장하는 이유는 다음과 같습니다.

좋아, 위의 내용은 약간 접선이지만 JavaFX를 홍보하고 싶습니다. ;-)

어쨌든, 질문의 특정 요점을 해결하려면 :

  • JavaFX는 크로스 플랫폼 GUI 프레임 워크입니다 (현재 Mac / Windows / Linux).
  • JavaFX에는 고품질 다중 스레딩 지원 기능이 내장되어 있습니다 (핵심 프레임 워크 자체는 다른 모든 GUI 플랫폼과 마찬가지로 단일 스레드이지만 GUI 스레드에서 동시에 실행되도록 GUI 스레드가 유지되도록 자체 작업을 정의 할 수 있음) 반응).
  • 잘 작성된 JavaFX 프로그램에는 상당히 많은 양의 데이터를 시각화하기에 충분한 성능을 발휘하는 데 문제가 없어야합니다. 다음은이를 수행하는 샘플 JavaFX 프로젝트 입니다.
  • CSS를 통해 응용 프로그램의 스타일을 지정하고 시각 효과 및 애니메이션을 사용하는 능력을 통해 디자이너와 함께 앱을 멋지게 만들 거나 기술이 있다면 직접 할 수 있습니다.
  • JavaFX에는 사용할 수 있는 TableViewTreeView 가 있습니다. Java 8 릴리스를 위해 개발 된 결합 된 TreeTable 컨트롤 도 있습니다 .
  • 사용자 지정 그림 그리기 위젯은 장면 그래프 모양 또는 직접 그리기 캔버스를 사용할 수 있습니다. 실제로 코딩 스타일과 환경 설정의 문제입니다.
  • JavaFX의 속성 및 바인딩 기능과 이벤트 리스너 프레임 워크를 결합하면 하나의 컨트롤을 사용하여 데이터를 수정하고 변경 내용을 다른 컨트롤에 즉시 반영 할 수 있습니다.
  • MVC 스타일 개발의 경우 일반 Java 객체를 사용하여 모델을 작성하고 FXML 마크 업 언어 (원하는 경우 SceneBuilder 그래픽 레이아웃 도구를 사용하여 작성)를 사용하여 뷰를 정의하고 Java (또는 원하는 경우 다른 스크립팅 언어)로 제어 로직을 정의 할 수 있습니다 CSS를 사용하여 스타일과 논리를 분리해야합니다.
  • Java에 대한 노출이 제한되어 있으므로 학습 곡선이 중요합니다. 우수한있다 자바 튜토리얼 이 도움을 줄 수 내가 이전에 링크 된 자바 FX 자습서뿐만 아니라이. JavaFX 핵심 코드는 JDK에서 사용할 수있는 기능 만 사용하므로 JavaFX를 사용하기 위해 많은 추가 라이브러리와 프레임 워크를 배울 필요가 없습니다 (예를 들어 JavaEE를 배우는 경우처럼). 따라서이 두 사이트는 속도를 높이는 데 필요한 대부분의 정보를 제공합니다.
  • 당신은 복잡한 응용 프로그램을 가지고있는 경우 응용 프로그램 조직의 경우, 완전한, 검증 된 클라이언트 응용 프로그램 프레임 워크의 지원을 필요로하고 추가 학습을 많이하고 상관 없어, 당신은에 자바 FX를 포함 할 수 있습니다 이클립스 RCP 또는 넷빈즈 RCP , 따라, 그들의 페이지에 수년간의 개발 시간을 절약 할 수 있습니다. 중소 규모의 프로젝트의 경우 Eclipse 및 NetBeans와 같은 복잡한 클라이언트 플랫폼 프레임 워크없이 JavaFX에서 직접 코딩하는 것이 더 간단하기 때문에 그러한 플랫폼을 살펴 보는 것이 좋습니다.
  • Swing 또는 JavaFX 중 어느 것을 사용해야하는지에 대해서는 실제로 가장 객관적인 사람이 아닙니다. JavaFX에는 단점이 있습니다. Swing을 사용할 때와 마찬가지로 사용하기 시작할 때 분명해집니다.
  • 온라인 자습서의 경우 가장 관련성이 높은 자습서에 연결했습니다. 가 완벽한 응용 프로그램에 대한 좋은 자습서 세트 .
  • Pro JavaFX 2Example의 JavaFX 2.0 소개 책 은 높은 평가를 받았습니다.

이 놀라운 답변에 감사드립니다! JavaFX는 확실히 달콤한 플랫폼처럼 들리며 확실히 많은 시간을 투자 할 것입니다. 또한 귀하가 추천 한 두 권의 책을 모두 내 도서관에서 볼 수 있습니다 :)
egor

1
"세계 최고의 IDE"링크는 실제로 IntelliJ IDEA를 가리켜 야합니다.
Cooper

1
JavaFX는 현재 내게 필요한 옵션 지원 기능이 없습니다. 그것은 (나를위한) 일부에게는 거래 차단기 일 수 있으며 Swing을 계속 사용해야합니다.
Cooper

JavaFX는 이제 내게 필요한 옵션 지원을 제공합니다. 이 기능은 JEP 204 : JavaFX Accessibility 가 구현 된 Java 8u40으로 제공되었습니다 .
jewelsea

5

로 이동 모델 - 뷰 - 발표자 패턴 대신. mvp4j 프로젝트 를 통해 Swing 에서 좋은 MVP 예제를 볼 수 있습니다 .

Swing은 아니지만 GWT Google Developers 사이트 에서 MVP 패턴을 확인하여이 패턴과 Java에 적용하는 방법에 대한 추가 정보를 얻을 수 있습니다. 프레임 워크에 관계없이 동일한 설계 원칙이 적용되며 GWT는 Swing과 매우 유사합니다.

MVP 작동 방식에 대한 빠른 분석 :

  • 보기 : GUI 구성 요소를 엄격하게 포함하는 클래스입니다. 로직이나 모델에 대한 인식이없고 이벤트 핸들러도 없습니다. 이렇게하면 뷰가 매우 멍청하지만 일회용 및 변경 가능합니다.
  • 발표자 : 응용 프로그램 논리를 처리하는 클래스입니다. 발표자는 하나 이상의 뷰 클래스에 바인딩하고 필요한 모든 응용 프로그램 논리 및 모델 제어를 처리합니다.
  • Model : 데이터 모델 객체. 가능한 한 POJO와 같이 유지하는 것이 가장 좋습니다 (일반 Java 객체).

MVP를 올바르게 구현하면 응용 프로그램이 매우 분리되어 응용 프로그램의 다른 영역을 방해하지 않으면 서 수정할 수 있습니다.

편집 : JavaFX를 사용하기로 한 결정에 따라 다음 기사를 확인하는 것이 좋습니다.


감사합니다! JavaFX를 사용하기로 결정했지만 MVP와이 플랫폼에서 어떻게 사용할 수 있는지에 대해 읽어 볼 것입니다.
egor

1
큰! 당신이 MVP 패턴을 사용하기로 결정한 경우, 여기에 자바 FX의 예를 제공하는 링크의 code.google.com/p/pennychecker-presenter/wiki/JavaFxMvpExample를
쿠퍼

2

필요한 위젯은 Swing 또는 SWT 모두에서 찾을 수 있습니다 . 이 문서에는 구성 요소 (Swing) 또는 위젯 (SWT)의 예가 포함되어 있으므로이를 쉽게 식별 할 수 있습니다.

Swing은 JDK에 포함되어 있으며 처음부터 빌드 된 GUI 라이브러리입니다. SWT는 외부이며 SWT는 기본 컴포넌트를 기반으로합니다.

MVC는 둘 다 지원합니다. Swing에는 실제로 기본 데이터를 제공하는 각 구성 요소에 대한 모델이 있습니다. 구성 요소 자체는 View와 Controller입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.