2016-06-20 1 views
0

직장에서 알아 내려고하는 디자인 문제가 있습니다. 몇 가지 의견을 고맙게 생각합니다.자바 라이브러리 디자인을위한 디자인

우리는 여러 장치가 서로 이야기하고 다양한 형식으로 메시지를 교환 할 수있게 해주는 인터페이스 엔진의 역할을하는 핵심 C 응용 프로그램을 보유하고 있습니다. 이 응용 프로그램은 서버에 설치되며 모든 다양한 장치가이 서버와 통신을 시작하고 메시지를 교환 할 수 있습니다. 이제 우리는이 애플리케이션의 범위를 확장하여 대부분 서버 작업과 관련된 여러 장치를 모니터링하는 작업 하위 집합에 대한 웹 인터페이스를 제공하려고합니다.

내가 염두에두고있는 아키텍처는 핵심 C 응용 프로그램과 대화하는 데 사용할 수있는 Java 라이브러리를 작성하는 것입니다. 그런 다음이 Java 라이브러리를 호출하는 REST API를 작성하십시오. 이 API는 프런트 엔드 응용 프로그램에서 액세스 할 수 있으며 스택 위로 이동할 수 있습니다. 이 라이브러리에 사용할 디자인 패턴에 대한 제안을 찾고 있습니다. 이 작업의 핵심은 서로 통신하는 여러 장치를 모니터링하는 것입니다. 도움을 주시면 감사하겠습니다.

+0

웹으로 돌아가려면 Spring-Boot를 살펴보십시오. 마이크로 서비스는 이러한 상황에 매우 효과적입니다. 또한 웹 백엔드를 통신을 구현하는 백엔드와 분리하여 갑자기 다른 여러 응용 프로그램으로 열 수 있습니다. – Kieveli

답변

1

핵심 작업은 서로 통신하는 다양한 장치를 모니터링하는 것입니다.

당신이해야 할 일은 interface입니다.

interface Device { /* put methods that will be used to monitor the devices */ } 

class FooDevice implements Device { /* ... */ } 

class BarDevice implements Device { /* ... */ } 

// ... 

내가 생각하고있는 아키텍처는 코어 C 응용 프로그램에 이야기하는 데 사용할 수있는 자바 라이브러리를 작성하는 것입니다. Java Native Interface를 사용하여 당신이 모르는 경우

는 그렇게 할 수있는 쉬운 (그리고 아마도 유일한) 표준 방법입니다.

+1

JNI는 표준 방법이지만 Java의 원시 코드를 사용하는 유일한 방법은 아닙니다. 예를 들어 [JNA] (https://en.wikipedia.org/wiki/Java_Native_Access)를 사용할 수도 있습니다.이 접근법은 JNI보다 쉽습니다. – Jesper

+1

실제로 성능이 중요하면 JNA 대신 [JNR] (https://github.com/jnr/jnr-ffi)을 사용하는 것이 좋습니다. JNI는 JNI만큼 빠르다. JNI가 리플렉션을 사용하는 동안 바이트 코드 생성을 사용하기 때문이다. 같은 시간에 JNR은 JNA처럼 단순합니다. – SerCe

관련 문제