2012-01-31 2 views
2

저는 Spring, Hibernate와 같은 J2EE 프레임 워크에서 상당한 지식을 가지고 있으며 관심사의 분리에 영감을 받았습니다. 나는 자바에서 데스크톱 개발의 초보입니다. 스윙이 다소 흐릿해질 수 있습니다. VB에서는 폼 디자인이 별도로 유지되며 폼에는 이벤트 리스너 만 포함됩니다. 하지만 스윙을 시작할 때 많은 것들이 하나의 클래스에로드되어 상황이 어려워집니다. 내가 틀린 곳을 찾을 수 없다. SWT와 같은 대안을 시작했을 때도 비슷한 일이 계속됩니다.스윙과 swt에서 프로그램 로직 폼 디자인을 분리하는 방법

샘플 SWT 코드는 내가

import java.awt.Color; 
import org.eclipse.swt.layout.FillLayout; 
import org.eclipse.swt.widgets.Display; 
import org.eclipse.swt.widgets.Shell; 
import edu.umd.cs.piccolox.swt.PSWTCanvas; 
import edu.umd.cs.piccolox.swt.PSWTPath; 
import edu.umd.cs.piccolox.swt.PSWTText; 
public final class SWTBasicExample { 

/** 
* Create and open a new shell on the specified display. 
* 
* @param display display 
* @return a new shell on the specified display 
*/ 
public static Shell open(final Display display) { 
    final Shell shell = new Shell(display); 
    shell.setLayout(new FillLayout()); 

    // create a new SWT canvas 
    final PSWTCanvas canvas = new PSWTCanvas(shell, 0); 

    // create some SWT nodes 
    // and add them as child nodes to the canvas' camera's first layer 
    PSWTPath rect = PSWTPath.createRectangle(25, 25, 50, 50); 
    rect.setPaint(Color.RED); 
    canvas.getLayer().addChild(rect); 

    rect = PSWTPath.createRectangle(300, 25, 100, 50); 
    rect.setPaint(Color.BLUE); 
    canvas.getLayer().addChild(rect); 

    PSWTPath circle = PSWTPath.createEllipse(100, 200, 50, 50); 
    circle.setPaint(Color.GREEN); 
    canvas.getLayer().addChild(circle); 

    circle = PSWTPath.createEllipse(400, 400, 75, 150); 
    circle.setPaint(Color.YELLOW); 
    canvas.getLayer().addChild(circle); 

    PSWTText text = new PSWTText("Hello World\nMultiline");   
    text.translate(350, 150); 
    text.setPenColor(Color.GRAY); 
    text.setBackgroundColor(Color.BLACK); 
    canvas.getLayer().addChild(text); 

    text = new PSWTText("Goodbye World"); 
    text.translate(50, 400); 
    text.setPenColor(Color.MAGENTA); 
    canvas.getLayer().addChild(text); 

    shell.open(); 
    return shell; 
} 

public static void main(final String[] args) { 
    final Display display = new Display(); 
    final Shell shell = open(display); 
    while (!shell.isDisposed()) { 
     if (!display.readAndDispatch()) { 
      display.sleep(); 
     } 
    } 
    display.dispose(); 
} 
} 

여기에 모든 그래서 우리의 비즈니스 로직과 디자인은 하나의 클래스에있는 어지럽히 인터넷

에서 얻었다. 나는 방법이 덜 복잡하고 재사용 할 수 있도록 최대 10 줄을 가질 수 있다는 것을 연구했다. 그것은 데스크탑 개발이 아닌 논리에만 적용 가능합니다.

한편, Swing은 MVC 프레임 워크라고 들었습니다. 그래서, 나는 논리, 디자인 및 제어의 깔끔한 분리를 원한다. Swing과 Swt에서 좋은 엔지니어링 사례를 따라 Java에서 데스크톱 개발을 쉽게하고 싶습니다. 내가 일식 SWT를 사용하고 있기 때문에 나에게 바람직 할 것이다.

감사합니다,

+0

지식이 풍부한 J2EE 프레임 워크는 얼마나 오래 작업하고 있습니까? (위반하지 말고 그냥 묻는다) – Sorceror

답변

1

봄 (및 기타 언급 된 기술/프레임 워크) GUI 프레임 워크에 비해 절대적으로 또 다른 목적이있다. 서로 다른 두 가지 기술에서 같은 것을 요구하지 않을 수도 있습니다. 데스크톱은 웹이 아니며 우리가 말하는 것과 같은 규칙이 없습니다.

SWT가있는 MVC 패턴 (특히 데이터 바인딩 용)을 사용하려면 JFace을 배우십시오.

+0

예, 당신의 의견을 받아 들일 것입니다. Apache Foundation, Springsource 조직 및 Jboss 커뮤니티를 추가 할 수있는 한 가지 방법은 웹 개발을위한 몇 가지 프레임 워크를 제공하여 Java 개발자를 도왔습니다. 그러나 Java의 데스크탑 개발에서는 그렇지 않습니다. 그러나 나는 그 이유를 모른다. 감사합니다. 귀중한 시간을 보냈습니다. D – MinusInfinity

+0

나는 웹이 데스크톱과 완전히 다른 기반으로 구성되었다는 것을 의미했습니다. 클라이언트 서버 패턴은 데스크톱 개발에서 일반적이지 않습니다. 이것이 대부분의 프레임 워크가 비슷한 접근법을 사용하지 않는 이유입니다. GUI에서 이와 같은 것을 사용하려고 할 때 막대한 양의 상용구 코드를 작성해야합니다. – Sorceror

1

스윙 대 SWT의 경우, 둘 다 사용했습니다 (하지만 주로 스윙). 최소한 SWT (~ 5 년 전)를 조사했을 때 SWT에 대한 문서는 Swing에 비해 매우 열악했습니다. SWT의 많은 디자인 측면을 좋아했지만 스윙, IMO보다 간단합니다. 스윙은 IMO가 훨씬 더 나은 문서, 예제 등을 가지고 있기 때문에 배우는 사람입니다. 그리고 더 많은 곳에서 사용됩니다.

일반 디자인 아이디어의 경우 주요 JPanels (또는 구성 요소가 무엇이든)이 인 경우 하나의 기술 은 각 JPanel과 관련된 모델/DataObject/BusinessObjects를 갖는 것입니다. JPanel에는 panelToModel() 및 modelToPanel()과 같은 메서드가 있습니다. 전자는 사용자가 변경 한 내용에 해당하는 모델을 작성 (또는 갱신)하고, 후자는 모델을 취하여 일치하도록 GUI를 갱신합니다. 자, 개인적으로, 나는 모달을 싫어하지만 이것은 아주 간단한 방법입니다.

+0

5 년은 길다;] .. SWT 문서가 좋지 않았지만 지금은 [SWT snippets] (http://www.eclipse.org/swt/snippets/)와 같은 훌륭한 코드없이 코드를 작성한다고 상상할 수는 없습니다. 스윙에 대한 이런 유형의 문서가 너무 많이 있습니다. – Sorceror

+0

그게 내게 많은 도움이되었을거야. 시간 계산 기계있어? :-) – user949300

1

스윙에서 구성 요소 자체는 대부분 MVC 패턴을 따릅니다. 모델을 기반으로하므로 시각적 표현을 쉽게 바꿀 수 있습니다. 더 큰 범위의 경우에는 직접 구현해야합니다. 우려의 분리를위한 일부 접근법은 Action의 사용법과 같이 존재합니다. 그러나 응용 프로그램 플랫폼을 사용할 준비가 전혀되어 있지 않으며 GUI 툴킷입니다. JSR 296 - "Swing Application Framework"와 같은 응용 프로그램 프레임 워크를위한 프로젝트가 있습니다. 그러나 이것은 수년간 완결되지 않습니다. 스윙을 기반으로 한 또 다른 주목할만한 플랫폼은 Netbeans platform이지만이 수준은 더 높습니다.

SWT 구성 요소는 MVC 개념으로 설계되지 않았습니다. JFace이 개념을 SWT에 도입했습니다. 이것의 Ontop은 기능상 Netbeans 플랫폼과 유사한 애플리케이션 프레임 워크 인 Eclipse RCP을 사용할 수 있습니다.

"원시"스윙을 프로그래밍하는 경우 약간의 지원이 있지만 여전히 많은 작업을 혼자서해야합니다. SWT는 귀하의 측면에서보다 기본적인 노력 (및 규율)을 요구합니다.그러나 MVC 아이디어를 구현하는 두 가지 플랫폼 모두에 대해서.

+0

궁금한 점은 소프트웨어가 어떻게 분리되어 있는지를 궁금해합니다. 적절한 분리없이 소프트웨어를 유지 관리 할 수 ​​있습니까? 산업 표준이 무엇인지 알기를 열망하는 사람 :) – MinusInfinity

관련 문제