2010-01-18 5 views
3

프런트 엔드 사용자 인터페이스는 물론 자체 엔진을 갖춘 시스템을 구축하려고합니다. 나는이 두 가지를 가능한 한 분리시키고 싶다. 엔진은 명령과 데이터를 받아 들일 수 있어야하며,이 데이터를 처리하고 결과를 반환 할 수 있어야합니다. 엔진 작업이 길어질 수 있으며 클라이언트는 현재 상태에 대해 언제든지 엔진을 쿼리 할 수 ​​있어야합니다.응용 프로그램 아키텍처에 대한 조언

디플로 프 프런트 엔드/백엔드 시스템은 새로운 영역이며 최고의 아키텍처를 확신하지 못합니다. 프론트 엔드를 웹 기반으로하고 싶습니다. 양식을 통해 엔진에 명령을 보내고 엔진 출력과 현재 상태를 모두 아약스 호출을 통해 표시합니다. 나는 Tomcat 내부에서 Spring 기반의 웹 애플리케이션을 사용할 가능성이 높다.

내 질문에는 엔진 구성 요소에 대한 최상의 구조가 포함됩니다. 다음은 내가 고려하고있는 가능성입니다.

  • 웹 응용 프로그램에서 스레드와 데이터 구조로 엔진을 구현하십시오. 여기에있는 장점은 더 간단한 구현 일 것이고 웹 앱 프론트 엔드와 엔진 사이의 메시징은 단순 할 것입니다 (일부 공유 된 데이터 구조 이상은 아닙니다). 단점은 엔진을 관리하기 위해 서버 컨테이너에 의존하여 (예 : 웹 서버 또는 웹 응용 프로그램이 충돌 한 경우 엔진도 마찬가지) 앞면과 뒷면 사이의 밀접한 결합입니다.

  • 백 엔드를 독립 실행 형 Java 응용 프로그램으로 구현하고 TCP 포트의 일부 서비스를 통해 해당 기능을 노출합니다. 웹 서버와 분리되어 있기 때문에이 방법이 마음에 듭니다. 그러나 필자는 필요한 저수준 네트워킹/통신 코드의 양에 대해 호소하지 않았습니다. 그 추상 소켓 등을 통과하는 메시지의 일부 높은 수준을 선호 할 것입니다.

  • 웹 서버와 엔진을 모두 호스팅하는 스프링 DM 서버와 같은 OSGi 컨테이너를 사용하십시오. 네트워킹 코드가 존재하지 않기 때문에이 방법이 좋습니다. 엔진은 웹 응용 프로그램이 사용할 수 있도록 OSGI 컨테이너에 서비스를 제공합니다. 여기서의 단점은 새로운 기술의 학습 곡선과 오버 헤드 인 OSGi입니다. 또한, 앞과 뒤의 끝은 내가 정말로 원하지 않는 다시 결합 된 채로있다. 즉, 이전 서블릿 컨테이너에 프런트 엔드를 배치 할 수 없었기 때문에 엔진과 동일한 OSGi 컨테이너에 있어야했습니다.

이 나는 ​​느낌 RMI 여기에 갈 수있는 방법이지만, 다시는 나를 위해 기술의 새로운 영역, 그리고 여전히 기본 시스템의 아키텍처를 설계하는 방법을 설명하지 않습니다 있습니다. JMS는 어떻습니까?

감사합니다.

답변

1

웹 앱이 될 경우 데스크탑 앱 프런트 엔드와 서버 백엔드가있는 것처럼 프로세스를 분리 할 필요가 없습니다. 그래서 간단하게 유지하십시오.

내가 사용하는 것 (그것이 나오는 것에 따라 내가 현재 일하고 있어요 프로젝트를 위해 사용하고 있습니다) 기본은 스택의 종류 :

  • 봄 3
  • 웹 컨테이너
  • 응용 프로그램 웹 응용 프로그램 (WAR)으로 배포;
  • 지속성을 위해 Ibatis (선호하는 옵션) 또는 JPA/Hibernate (더 많은 객체 지속성 접근 방식을 선호하는 경우);
  • 선호하는 웹 프레임 워크 선택. 여기에는 쉬운 대답이 없으며 스트레이트 템플릿부터 더 많은 컴포넌트 화 (JSF, Seam 등)까지 선택할 수있는 수십 가지가 있습니다.Tapestry/Wicket은 재미있어 보이지만 나는 전문가도 아닙니다.

스프링 컨테이너는 전적으로 일련의 스레드를 시작할 수 있으며 매우 일반적입니다. 따라서 필요한 것은 단순히 엔진이 될 일련의 구성 요소입니다. 달리해야 할 특별한 이유가 없다면, 웹 애플리케이션 컨텍스트 내의 스프링 빈은 간단하고 유연하며 강력합니다.

프런트 엔드에서는 원하는 내용에 따라 다릅니다. 스트레이트 HTML은 모든 웹 프레임 워크에서 수행 할 수 있습니다. 일부 자바 스크립트로 장식 한 경우에도. 나는 그런 종류의 jQuery를 사용한다.

프런트 엔드를 데스크톱 앱 (소위 "리치"UI)처럼 보이게하려면 약간 다릅니다. 이를 위해 JSF와 같은 구성 요소 웹 프레임 워크 인 Google Web Toolkit ("GWT") 또는 ExtJS, SmartClient, YUI 또는 Javascript 프레임 워크를 사용해야합니다. 새로운 우키.

1

백엔드를 서비스로 작성하면 UI가 분리되고 클라이언트와 서비스간에 전달되는 XML 또는 JSON 메시지 형식이 설정됩니다.

나머지 모든 cletus의 의견은 백엔드에서 유효 할 수 있지만 클라이언트는 그 사실을 알아 차리지 못할 수 있습니다. 심지어 모든 것이 신경 쓸 수있는 .NET 구현 일 수도 있습니다. 초점은 유스 케이스와 메시지에 있으며 백엔드 구현에는 없습니다.

HTML이 아닌 UI (예 : Flex)를 사용할 때도 유용합니다.

2

웹 앱과 엔진을 분리하려는 경우 엔진을 다른 서버에 배포하고 API를 웹 서비스 호출 (WS- * 또는 REST)로 노출 할 수도 있습니다.

+0

+1 권장 REST – medopal

관련 문제