내 응용 프로그램의 여러 부분 간의 상호 작용 디자인에 대한 조언이 필요합니다.


10

NetBeans Platform 7을 기반으로하는 Rich Desktop 응용 프로그램의 "기본"클래스를 설계하려고합니다.이 응용 프로그램은 HTTP 서비스를 사용하고 TCP를 통한 "푸시 시스템"을 통해 메시지를 수신합니다.

  • 우리는 3 명의 개발자이며 동시에 모듈을 개발하고 싶습니다
  • 응용 프로그램 계층화 (데이터, 비즈니스, 프레젠테이션)
  • 책임을 분리하기 위해 프레젠테이션 모델 을 사용합니다.
  • 일부 세분화 된 데이터 (예 : Bean Person)는 여러 화면에서 공유되며 동시에 여러 화면에 표시 될 수 있습니다.
  • ...

개별 화면을 개발할 수는 있지만 전체 응용 프로그램을 구성하고 각 모듈 내용을 정의하는 방법을 정확히 모릅니다.

  1. 따라서 전체 응용 프로그램 내에서 상호 작용을 조정 / 관리하기위한 조언 (패턴 / 모범 사례 / 도서 / 샘플 앱)이 있습니까?
  2. 모듈 내용을 정의하는 방법에 대한 조언이 있습니까?

감사!


내가 만들고 싶은 것을 보여주는 작은 예 : Foo 사용자 관리 응용 프로그램

  1. 응용 프로그램을 시작
  2. 왼쪽 [explorer]에는 플랫폼 목록이 있습니다 (목록은 로컬 파일에 저장 됨)
  3. 맨 위에는 새로운 플랫폼을 추가 할 수있는 버튼이 있습니다 (오른쪽 클릭으로도 사용 가능)
  4. 플랫폼을 두 번 클릭하면 앱이 HTTP 서비스를 호출하고 전체 사용자 목록을 검색합니다. 이 목록은 [편집기] (JTable)에 표시됩니다.
  5. 백그라운드 프로세스가 시작됩니다. TCP 연결을 통해 메시지를받습니다.
  6. 툴바의 버튼으로 새로운 사용자를 추가 할 수 있습니다

응용 프로그램이 다른 PC에서 실행되고 사용자가 동일한 플랫폼에 연결된 경우 사용자 목록이 동적으로 업데이트됩니다 (추가 / 제거 / 상태 : {offline / online}) (메시지 덕분에)

앞으로는 채팅 모듈이 제공 될 것입니다.

내 질문은 (즉,) 각 모듈의 내용을 결정하는 조언 / 모범 사례는 무엇입니까? PM (프레젠테이션 모델)이보기 / 비즈니스 및 데이터를 분리하고 화면을 만드는 좋은 방법이라면 PM을 기반으로 여러 화면을 연결하는 가장 좋은 방법은 무엇입니까? 사용자 모듈을 마우스 오른쪽 버튼으로 클릭하여 사용 가능한 컨텍스트 메뉴에 "Discuss with ..."항목을 추가하는 방법을 채팅 모듈을 개발한다고 상상해보십시오.


3
무엇을 요구하는지 명확하지 않습니다. 질문을 설명하기 위해 작은 예를 제공하는 것은 어떻습니까?
Robert Harvey

Geertjan Wielenga의 그레이트 포스트. Tom Wheeler 문의 내용 (NetBeans Dream Team 멤버)을 포함합니다. java.dzone.com/news/how-to-split-into-modules
Destroyica

답변:


5

요구 사항이 주어지면 핵심 처리 작업을 시작하려면 명령 패턴 으로 만들어야 하며 나중에 요청 프로세서에 템플릿 패턴 을 사용할 수 있습니다 . 그리고 계속해서. 마스터 패턴이라고하는 것은 없습니다. 있다면 더 이상 우리를 필요로하지 않을 것입니다.

아이디어는 요구 사항에 따라 진화 할 수있는 디자인을 갖추는 것입니다.

기본 모듈 인터페이스를 만드는 것으로 시작하여 모든 사람과 그 주변의 유틸리티에게 인터페이스를 제공합니다. 모든 사람이 기본 모듈을 기반으로 자신의 모듈을 구현할 수 있습니다.


3

나는 당신이 서비스에 의해 뒷받침되는 꽤 고전적인 MVC 패턴을보고 있다고 생각 합니다 (RESTful I 가정). 핵심은 서비스를 UI에서 분리하는 것입니다. 이는 대체 UI를 도입하기 때문이 아니라 서비스 인터페이스의 선명도를 제공하기 때문입니다.

따라서 getPeople서비스에 대해 생각할 때 보조 (비 스윙) UI가 서비스와 상호 작용하는 방식에 대해 생각해야합니다. 이를 염두에두면 상당히 유연하고 분리 된 솔루션이 나옵니다.

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